已知单片机晶振频率为6MHz,采用查询方式编写程序,求答案

已知单片机晶振频率为6MHz,采用查询方式编写程序,使用T0以工作方式1产生周期为35ms的等宽方波连续脉冲,并由P3.7口输出

;
ORG 0000H
MOV TMOD, #01H ;T0方式1定时
SETB TR0 ;启动T0
LOOP:
MOV TH0, #(65536-35000/2/2) / 256 ;送入初始值
MOV TL0, #(65536-35000/2/2) MOD 256 ;定时17500us@6MHz
JNB TF0, $ ;等待定时完成
CLR TF0 ;清除标志
CPL P3.7 ;输出方波
SJMP LOOP ;无限循环
END ;完
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-08
ORG 0000H
SJMP START
ORG 0100H
START:MOV TMOD,#01H
MOV TL0,#5CH
MOV TH0,#44H
SETB TR0
LOOP:JNB TF0,$
CLR TF0
MOV TL0,#5CH
MOV TH0,#44H
CPL P3.7
SJMP LOOP
END
第2个回答  2023-03-11

使用T0以工作方式1产生周期为35ms的等宽方波连续脉冲,并由P3.7口输出的代码,希望对你有帮助。以下是一个可能的代码:

#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit P37 = P3^7; //定义P3.7口uchar TH0_data = 0x00; //定义定时器T0高八位初值uchar TL0_data = 0x00; //定义定时器T0低八位初值void main(){
TMOD = 0x01; //设置定时器T0工作在方式1
TH0 = TH0_data; //给定时器T0高八位赋初值
TL0 = TL0_data; //给定时器T0低八位赋初值
TR0 = 1; //启动定时器T0
while(1) //循环查询TF0标志位
{        if(TF0 == 1) //如果TF0为1,说明溢出了,即计数到达65536次
{
TF0 = 0; //清零TF0标志位
TH0 = TH0_data; //重新给定时器T0高八位赋初值
TL0 = TL0_data; //重新给定时器T低八位赋初值
P37 = ~P37; //取反P3.7口的电平,产生方波脉冲信号
}
}
}

其中,定时器T的高八位和低八位的初值需要根据晶振频率和方波周期来计算。

    方法:已知单片机晶振频率为6MHz,那么机器周期为2us。方波周期为35ms,那么半个周期为17.5ms。定时器T需要计数到17.5ms/2us=875000次才能溢出。因此,65536-875000=65461=FFCDH。

    结果:所以,THO_data=FFH;TLH_data=CDH。

第3个回答  2011-01-08
你是学生吧, 都用定时器了,还用什么查询方式,NC出的题目
相似回答