计数器部份:
定时器初始化
TMOD=V_TMOD;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
ET0=1;
EA=1;
void timer0(void) interrupt 1 using 2 {}
串口:
TMOD |= 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增
TR1 = 1; // 启动定时器1
//IE = 0x0; // 禁止任何中断
IE |= 0x90 ; //Enable Serial Interrupt
//串口接收中断函数
void serial () interrupt 4 using 3
这样写为啥不能同时工作, 查据说不行,那如何写
用的是STC89C52
------解决方案--------------------
串口初始化
void init_serialcomm(void) {
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD
------解决方案--------------------
= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
PCON
------解决方案--------------------
= 0x80; //SMOD=1;
TH1 = 0xF4; //Baud:4800 fosc="11".0592MHz
IE
------解决方案--------------------
= 0x90; //Enable Serial Interrupt
TR1 = 1; // timer 1 run // TI="1"; }
计数器中断
TMOD=0x1; //T0,工作方式1
TH0=0xb1; //20ms定时
TL0=0xe0;
TR0=1; //开启T0定时器
ET0=1; //允许T0定时器中断
EA=1; //开启总中断允许
P2=Tab[0];P0_0=0;P0_1=0;//显示00
------解决方案--------------------
"中断嵌套" 分部分嵌套, 和全嵌套
"部分嵌套" 就是中断如 (定时)中 打开 本中断以外 的 其他中断(串口j).
全嵌套 就是中断中 可以打开本中断. 这是硬件速度不够的现象,
所以全嵌套 是很少用的.
------解决方案--------------------
/********************************************************************
* 名称 : UART0_INIT()
* 功能 : 初始化串口程序,晶振11.0592, 波特率9600
* 输入 : 无
* 输出 : 无
***********************************************************************/
void UART0_INIT()
{
TMOD
------解决方案--------------------
= 0x20;
SCON = 0x50;
PCON = 0x00;
TH1 = 0xFd;
TL1 = TH1;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; //开总中断
}
/********************************************************************
* 名称 : TIMER0_INIT()
* 功能 : 初始化T0函数.
* 输入 : 无
* 输出 : 无
***********************************************************************/
void TIMER0_INIT()
{
TMOD
------解决方案--------------------
= 0x05;
TH0 = 0x00;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main()
{
TMOD =0x00;
UART0_INIT();
TIMER0_INIT();
//add your code here!
}
本人使用一直都没有问题啊!