单片机·汇编初学者求教高手:80c51用定时器在p1.0管脚上产生一周期为2ms的方波,时钟频率为12MHz

顺便请教一下,定时器T1和T0在工作方式0,1,2,3下,TMOD的值

第1个回答  2012-01-09
1、定时器工作方式0,1,2,3的TMOD=0x00,0x11,0x22,0x33
2、#include <reg51.h>
sbit out=P1^0; //定义方波输出脚
void main( void) //主函数
{
out=0; // P1.0输出为0
TMOD=0x01; //工作方式1,16位计数
TH0=0x03; //给定时器初值,周期为2ms,则半个周期为1ms
TL0=0xe8; //给定时器初值
EA=1; //打开中断
ET0=1; //允许中断
TR0=1; //启动定时器
while(1); //等待
}

void Time0(void) interrupt 1 using 2
{
out=!out; //P1.0取反
TH0=0x03; //给定时器初值
TL0=0xe8; //给定时器初值
}追问

能不能用汇编写一个?谢啦

追答

你大爷。那个谁,误导我

第2个回答  2012-01-09
我给你个C的程序:
/*********************************************************
程序名称:cyb
程序功能:采用中断方式,通过T/C0的工作方式0,在P1.0输出周期为2MS的方波
创建时间:2012-01-09
***********************************************************/
#include <reg51.h>
sbit out=P1.0; //定义方波输出脚
void Time0 (void); //T/C0中断函数声明
/*********************************************************
程序名称:void main()
程序功能:主函数,初始化CPU
创建时间:2012-01-09
*********************************************************/
void main( void) //主函数
{
out=0; // P1.0输出为0
TMOD=0x00; //工作方式1
TH0=0xe0; //给定时器初值
TL0=0x18; //给定时器初值
EA=1; //打开中断
ET0=1; //允许中断
TR0=1; //启动定时器
do{ }while(1); //等待
}
/*********************************************************
程序名称:void Time0(void)
程序功能:输出信号反向,重装计数初值
创建时间:2012-01-09
*********************************************************/
void Time0(void) interrupt 1 using 2
{
out=!out; //P1.0取反
TH0=0xe0; //给定时器初值
TL0=0x18; //给定时器初值
}
有什么不懂再问我,刚开始我也学的汇编,后来学C 了,感觉C比汇编要好学。追问

我现在学的就是汇编,感觉汇编不好学,能不能用汇编写一个?

第3个回答  2012-01-24
ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H
MAIN:
ACALL INIT_INT0
AJMP $

INIT_INT0:
MOV TMOD,#01H
MOV TH0,#0FCH
MOV TL0,#18H
SETB EA
SETB ET0
SETB TR0
RET

T0INT:
MOV TH0,#0FCH
MOV TL0,#18H
CPL P1.0
RETI

END

方式0,TMOD=#00H
方式1,TMOD=#01H
方式2,TMOD=#02H
方式3,TMOD=#03H本回答被提问者采纳