若8031单片机的时钟为6MHz晶振 ,请利用定时器T0定时中断的方法,使P1.0输出矩形脉冲。

C语言编程... C语言编程 展开
 我来答
NJGQZF
2015-07-12 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3165
采纳率:0%
帮助的人:1266万
展开全部
;启动入口
ORG 0000H ;复位启动
LJMP START ;
ORG 000BH ;T0中断
LJMP T0INT ;
ORG 0100H ;
LJMP START ;
;主控程序
YSJS EQU 30H
MCJS EQU 31H
START: MOV SP,#80H ;初始堆栈值
MOV TMOD,#01H ;定时器0工作于方式1
MOV TH0,#3CH ;定时器0定时时间=50000uS
MOV TL0,#0B0H ;
SETB ET0 ;使能定时器0中断
SETB EA ;开总中断
SETB TR0 ;定时器0启动,开始定时
MOV YSJS,#20
MOV MCJS,#2
JMP $ ;
;
;定时器0中断服务程序
T0INT: MOV TH0,#3CH ;定时器0定时时间=50000uS
MOV TL0,#0B0H ;
DJNZ YSJS,QT0
MOV YSJS,#20
JB P1.0,OUT
DJNZ MCJS,QT0
MOV MCJS,#2
OUT:
CPL P1.0 ;
QT0:
RETI ;
END ;
更多追问追答
追问
汇编我看不懂,能不能用c语言的啊,大神
追答
#include "reg51.h"
unsigned char YSJS=20;
unsigned char MCJS=2;
sbit OUT=P1^0;

void Timer1Init(void) //50000微妙@12.000MHz
{
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0xB0; //设置定时初值
TH0 = 0x3C; //设置定时初值
ET0 = 1; //使能定时器0中断
TR0=1; //定时器0开始计时
EA =1; //开总中断
}
void main(void)
{
Timer1Init();
while(1)
{
}
}

void TIMER1(void) interrupt 1 //定时器0中断函数使用默认寄存器组
{
TL0 = 0xB0; //设置定时初值
TH0 = 0x3C; //设置定时初值
YSJS--;
if(YSJS=0)
{
YSJS=20;
if(OUT=1)OUT=!OUT;
}
else
{
MCJS--;
if(MCJS=0)
{
MCJS=2;
OUT=!OUT;
}
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式