本帖最后由 robin_chen559 于 2013-11-29 16:19 编辑
用51(STC)
单片机的时候端口定义LED ,!LED即可改变LED的状态,现在练习PIC12Lf1822好像不好用。
定时后中断:
if(A==1)
{
LED_G = 0;
A = 0;
}
else
{
LED_G = 1;
A = 1;
}
好使,但是LED_G = !LED_G;或
LED_G = ~LED_G都没反应,为啥呢?
库文件没有这个运算符么?
源程序:
#include<pic.h>
#define LED_G RA0
unsigned char TMR1_NUM = 0;
bit A;
//子程序说明
void Init_Star(void); //开机初始化
void Init_TMR1(void); //定时器1初始化
//子程序
void Init_Star(void) //开机初始化
{
OSCCON = 0b01101010; //内部4M系统时钟
TRISA0 = 0; //RA0输出
A = 1;
LED_G = 1;
}
void Init_TMR1(void) //定时器1初始化
{
TMR1H = 0x3c; //(65536-50000)/256
TMR1L = 0xaf; //(65536-50000)%256
TMR1IE = 1;
INTCON = 0b11000000; //GIE、PEIE置1,中断设置
T1CON = 0b00010101; //TMR1内部1:2预分频,100mS计数
}
void interrupt ISR(void) //中断服务子程序
{
if(TMR1IF == 1)
{
TMR1IF = 0;
TMR1H = 0x3c; //重装定时器1初值
TMR1L = 0xaf;
TMR1_NUM++;
if(TMR1_NUM >=5)
{
TMR1_NUM = 0;
// LED_G = !LED_G;
/****** *****/
if(A==1)
{
LED_G = 0;
A = 0;
}
else
{
LED_G = 1;
A = 1;
}
}
}
}
void main(void) //主程序
{
Init_Star(); //开机初始化
Init_TMR1(); //定时器TMR1初始化
while(1);
}
/*****************************************************/
附件 :protues 7.10
mplab8.70
备注:由于MPLAB是设置配置字,
仿真的时候PIC12LF1822的属性里边配置字要跟MPLAB的一样才行,不然仿真出来的周期不一样
-
MPLAB配置字
-
PROTEUS配置字
-
-
TMR1_TEST.rar
下载积分: 积分 -1 分
98.15 KB, 下载次数: 5, 下载积分: 积分 -1 分
源文件
一周热门 更多>