已知振荡频率为12MHz,用定时器/计数器T0,工作于方式1,实现从P1.0口输出周期为(20+学号后2位)ms的方波。分别用汇编语言和C语言,用中断方式和用查询方式编制程序。
时间: 2024-06-09 18:08:01 浏览: 43
抱歉,我是一名语言模型AI,无法直接操作硬件。不过,我可以给您提供一些思路和代码参考:
中断方式汇编代码:
```
ORG 0H ;程序起始地址
MOV TMOD, #01H ;T0工作方式1
SETB TR0 ;启动定时器T0
SETB EA ;开总中断
MAIN:
SJMP $ ;一直循环等待中断
TIMER0_ISR:
CLR TR0 ;停止定时器T0
MOV TH0, #0FCH ;设置定时器初值
MOV TL0, #0C0H
SETB TR0 ;重新启动定时器T0
MOV P1.0, C ;输出方波
CPL C ;改变方波状态
RETI ;中断返回
END
```
中断方式C语言代码:
```
#include <8051.h>
#define FREQ 12000000UL //振荡频率为12MHz
#define CYCLE_TIME (20+学号后2位) //方波周期时间,单位为ms
#define TIMER_VALUE (65536-(CYCLE_TIME*FREQ/12)/1000) //计算定时器初值
unsigned char C = 0; //方波状态变量
void main() {
TMOD = 0x01; //T0工作方式1
TH0 = TIMER_VALUE / 256; //设置定时器初值
TL0 = TIMER_VALUE % 256;
TR0 = 1; //启动定时器T0
EA = 1; //开总中断
while(1); //一直循环等待中断
}
void Timer0_ISR() interrupt 1 {
TR0 = 0; //停止定时器T0
TH0 = TIMER_VALUE / 256; //重新设置定时器初值
TL0 = TIMER_VALUE % 256;
TR0 = 1; //重新启动定时器T0
P1_0 = C; //输出方波
C = ~C; //改变方波状态
}
```
查询方式汇编代码:
```
ORG 0H ;程序起始地址
MOV TMOD, #01H ;T0工作方式1
SETB TR0 ;启动定时器T0
MAIN:
MOV A, TL0 ;读取定时器T0的值
ANL A, #0FH ;取低4位
CJNE A, #0, MAIN ;如果不为0,一直等待
CLR TR0 ;停止定时器T0
MOV TH0, #0FCH ;设置定时器初值
MOV TL0, #0C0H
SETB TR0 ;重新启动定时器T0
MOV P1.0, C ;输出方波
CPL C ;改变方波状态
SJMP MAIN ;循环查询
END
```
查询方式C语言代码:
```
#include <8051.h>
#define FREQ 12000000UL //振荡频率为12MHz
#define CYCLE_TIME (20+学号后2位) //方波周期时间,单位为ms
#define TIMER_VALUE (65536-(CYCLE_TIME*FREQ/12)/1000) //计算定时器初值
unsigned char C = 0; //方波状态变量
void main() {
TMOD = 0x01; //T0工作方式1
TH0 = TIMER_VALUE / 256; //设置定时器初值
TL0 = TIMER_VALUE % 256;
TR0 = 1; //启动定时器T0
while(1) {
while((TL0 & 0x0F) != 0); //查询定时器T0低4位是否为0
TR0 = 0; //停止定时器T0
TH0 = TIMER_VALUE / 256; //重新设置定时器初值
TL0 = TIMER_VALUE % 256;
TR0 = 1; //重新启动定时器T0
P1_0 = C; //输出方波
C = ~C; //改变方波状态
}
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![md](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)