#include<reg52.h> #include<absacc.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char #define TMAX 122 #define CONT 253 //0xfd #define NOP _nop_();_nop_();_nop_(); sbit LED=P0^0;
uchar time_flag=0; /********************************************************************* * 函 数 名: 延迟模块 * 功能描述:delay_ms(uint x) 延迟1*x毫秒 * 函数说明: delay_100us(uint x) 延迟10*x微秒 * 调用函数: * 输 入: uint x * 返 回: ***********************************************************************/ void delay(uint x) { uchar j; while(x--) { for(j=0;j<TMAX;j++); } }
/********************************************************************* * 函 数 名: time0() * 功能描述:定时器0中断 * 返 回: 无 ***********************************************************************/ void time0() interrupt 1 using 2 { TL0=0xb0; TH0=0x3c; time_flag++; if(time_flag>=10) { time_flag=0; LED=~LED; } TF0=0; } /********************************************************************* * 函 数 名: init_serialcomm(); * 功能描述:串行初始化 * 函数说明: ***********************************************************************/ void init_serialcomm(void) { SCON=0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr TMOD=0x20|(TMOD&0x0f); //TMOD: timer 1, mode 2, 8-bit reload PCON=0x00; //SMOD=0; TL1=CONT; //Baud:9600 fosc=11.0592MHz TH1=TL1; ES=1; //Enable Serial Interrupt EA=1; TR1=1; // timer 1 run // TI=1; } /********************************************************************* * 函 数 名: send_char_com(uchar ch) * 功能描述:向串口发送一个字符 * 函数说明: ***********************************************************************/ void send_char_com(uchar ch) { TI=0; SBUF=ch; while(TI==0); TI=0; } /********************************************************************* * 函 数 名: 主函数 * 功能描述:send_char_com(uchar ch)中的ch==1, 3, 5, 7, 9, 11 * 函数说明: 启动 停止 左转 右转 减速 加速 ***********************************************************************/ void main(void) { TMOD=0x01; TL0=0xb0; TH0=0x3c; ET0=1; // PS=1; init_serialcomm(); //TMOD,EA=1,ES=1 TR0=1; LED=1; //指示灯-已加上拉 while(1) {
send_char_com(1); /*此函数用于测试,当我用此句循环串行发送时,无法进入定时器0中断使LED闪烁(P00已加上拉),在中断函数中加断点无法进入!*/ delay(100); //while(1); /*当此句加入时,即做死循环后,能进中断--LED能实现闪烁! } }
//大家帮忙看看,哪里出问题了啊?谢谢各位!
|