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

C语言编程

;启动入口
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;
}
}
}

追问

太棒了,这些来!

温馨提示:答案为网友推荐,仅供参考