打印

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

[复制链接]
1789|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xlsbz|  楼主 | 2009-12-1 08:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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

程序中的序号 代表程序执行的次序

相关帖子

沙发
xlsbz|  楼主 | 2009-12-1 08:30 | 只看该作者
这我自己乱写的一个! 可能有问题,大家指点指点.....

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

190

主题

1614

帖子

4

粉丝