试题详情
简答题某8051系统晶振频率为6MHz,先欲从P1.7引脚输出一个连续5Hz的方波信号,请编写程序。
  • 5Hz的方波周期为200毫秒,高低电平各持续100毫秒,若晶振频率为6MHz,则机器周期为2微秒,故其计数值应为: N=100ms/2μs=50000
    采用方式1进行计数,则 X=M-N=65536-50000=15536H=0C350H
    程序编写如下:
    M.OV TMOD, #05H; 设置T0工作方式,定时,方式1
    M.OV TH0,#0C3H;  写入计数器初值
    M.OV TL0,#050H;
    S.ETB TR0;启动T0
    L.OOP: JBC  TF0,$; 查询定时器溢出标志
    M.OV TH0,#0C3H;
    M.OV TL0,#050H
    C.PL  P1.7
    S.JMP LOOP;
    E.ND
    也可以用C语言编写:
    用定时/计数器T0从P1.7输出周期为5s的方波,晶振频率为6MHz。
    #include 
    #define uchar unsigned char
    #define uint unsigned int
    S.bit D1=P1^0;
    U.char a;
    V.oid init()               //初始化 {
    T.MOD=0x01;             //选择定数计数器0的工作方式为16位定时器
    T.H0=(65535-50000)%256; //赋初值,定时100ms
    T.L0=(65535-50000)/256;
    E.A=1;                  //中断控制允许
    E.T0=1;
    a=0; 
    TR0=1;                 //启动定时器0 } 
    void time0() interrupt 1 //定时器0中断函数 { 
    TH0=(65535-50000)%256; //赋初值,定时100ms     TL0=(65535-50000)/256;     a++; 
    TR0=1;     } 
    void main() 
    { 
    init();     
    while(1)     
    { 
    while(a==25)//半个周期(2500ms)时,P1.7上的电平跳变一次。 
    { 
    a=0; 
    P1.7=~P1.7;     //取反        }     } }
  • 关注下方微信公众号,在线模考后查看

热门试题