[分享]用于理解中断采样和中断查询的程序!

[复制链接]
2485|1
 楼主| xlsbz 发表于 2009-12-1 08:29 | 显示全部楼层 |阅读模式
本帖最后由 xlsbz 于 2009-12-1 08:31 编辑

刚学单片机中断时,用于调试理解中断采样和中断查询的程序!
用的是软件仿真。以前没有条件买硬件仿真器


  1. #include <REG52.H>
  2. void HardwareConfig(void);
  3. void delay1(void);
  4. void delay2(void);
  5. void delay3(void);
  6. unsigned char i;
  7. /* 一个机器周期 = (12/晶振)= 1us
  8.   【1】与【2】之间2us,其中前1us用于中断采样,后1us用于中断查询 */
  9. /*-------------------------------------------------------------------------*/
  10. void main(void) {
  11.     HardwareConfig();
  12.     TR1   = 1;    // TR1:  timer 1 run   
  13.     ES    = 1;    // 开串口中断
  14.     EA    = 1;    // 开CPU中断
  15.     TI = 1;       //【1】此语句1us
  16.     i = 1;    //【7】
  17.     i = 1;    //【8】
  18.     i = 1;    //【11】【14】
  19.     delay1();  //【15】
  20.     while (1) {        
  21.         ;
  22.     }
  23. }
  24. void uart_server(void) interrupt 4
  25. {   
  26.     if (TI) { //【3】【9】
  27.     i = 1;    //【4】【10】
  28.     }
  29.     if (RI) {   //【5】【11】
  30.     i = 1;
  31.     }                 
  32. }                //【6】【12】
  33. void delay1(void)
  34. {
  35.     delay2();
  36.     i = 1;
  37.     i = 1;
  38.     i = 1;
  39. }
  40. void delay2(void)
  41. {
  42.     delay3();
  43. }                    /*【2】【8】【13】【16】此语句2us。事实上,哪里有LJMP指令,【2】就可以放在哪里!
  44.                             书上的是用LCALL指令*/
  45. void delay3(void){
  46.     i = 1;
  47. }
  48. void HardwareConfig(void)
  49. {
  50.     TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload
  51.     TH1   = 250;  // TH1:  reload value for 9600 baud @ 22.1184 MHz
  52.     TL1   = 250;
  53.     SCON  = 0x50; // SCON: mode 1, 8-bit UART, enable rcvr
  54.     PCON  = 0x00; // SMOD = 0
  55. }

注意用的是keil 我当时用的是V8.02   
优先级一定要设置为0
晶振12Mhz

程序中的序号 代表程序执行的次序
 楼主| xlsbz 发表于 2009-12-1 08:30 | 显示全部楼层
这我自己乱写的一个! 可能有问题,大家指点指点.....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

190

主题

1614

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部