本帖最后由 xlsbz 于 2009-12-1 08:31 编辑
刚学单片机中断时,用于调试理解中断采样和中断查询的程序!
用的是软件仿真。以前没有条件买硬件仿真器-
- #include <REG52.H>
- void HardwareConfig(void);
- void delay1(void);
- void delay2(void);
- void delay3(void);
- unsigned char i;
- /* 一个机器周期 = (12/晶振)= 1us
- 【1】与【2】之间2us,其中前1us用于中断采样,后1us用于中断查询 */
- /*-------------------------------------------------------------------------*/
- void main(void) {
- HardwareConfig();
- TR1 = 1; // TR1: timer 1 run
- ES = 1; // 开串口中断
- EA = 1; // 开CPU中断
- TI = 1; //【1】此语句1us
- i = 1; //【7】
- i = 1; //【8】
- i = 1; //【11】【14】
- delay1(); //【15】
- while (1) {
- ;
- }
- }
- void uart_server(void) interrupt 4
- {
- if (TI) { //【3】【9】
- i = 1; //【4】【10】
- }
- if (RI) { //【5】【11】
- i = 1;
- }
- } //【6】【12】
- void delay1(void)
- {
- delay2();
- i = 1;
- i = 1;
- i = 1;
- }
- void delay2(void)
- {
- delay3();
- } /*【2】【8】【13】【16】此语句2us。事实上,哪里有LJMP指令,【2】就可以放在哪里!
- 书上的是用LCALL指令*/
- void delay3(void){
- i = 1;
- }
- void HardwareConfig(void)
- {
- TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload
- TH1 = 250; // TH1: reload value for 9600 baud @ 22.1184 MHz
- TL1 = 250;
- SCON = 0x50; // SCON: mode 1, 8-bit UART, enable rcvr
- PCON = 0x00; // SMOD = 0
- }
注意用的是keil 我当时用的是V8.02
优先级一定要设置为0
晶振12Mhz
程序中的序号 代表程序执行的次序
|