微控制器作业答案doc文档格式.docx

上传人:b****5 文档编号:18783072 上传时间:2023-01-01 格式:DOCX 页数:11 大小:21.86KB
下载 相关 举报
微控制器作业答案doc文档格式.docx_第1页
第1页 / 共11页
微控制器作业答案doc文档格式.docx_第2页
第2页 / 共11页
微控制器作业答案doc文档格式.docx_第3页
第3页 / 共11页
微控制器作业答案doc文档格式.docx_第4页
第4页 / 共11页
微控制器作业答案doc文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

微控制器作业答案doc文档格式.docx

《微控制器作业答案doc文档格式.docx》由会员分享,可在线阅读,更多相关《微控制器作业答案doc文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

微控制器作业答案doc文档格式.docx

4.11、用C51语言和汇编语言混合编程的方法,使单片机的P1.0引脚产生占空比为90%周期为10ms的方波。

程序如下:

C程序文件:

#defineucharunsignedchar

sbitP1_0=P1^1;

externdelay1ms(uncharx);

//外部函数delay1ms()声明,入口参数为x

main()

{

for(;

;

P1_0=1;

delay1ms(9);

//调用外部函数delay1ms(9),参数9送入寄存器R7

P1_0=0;

delay1ms

(1);

}

voiddelay1ms()

#pragmaasm

public_delay1ms//用public声明_delay1ms为其他函数调用,以"

_"

开头后跟函数名

desegmentcode//定义de段在定义函数段

rsegde//定义de为当前段

_delay1ms:

nop

dela:

movr1,#0f8h

lop1:

nop

djnzr1,lop1

djnzr7,dela

ret

end

#pragmaendasm

微控制器作业(第六章)

6.2、设计一个声光报警器,设备正常运行时,绿色指示灯亮,若设备非正常运行时,红灯闪烁、报警器持续发声报警。

intrins.h>

defineredp1^0//红灯输入

definegreenp1^1//绿灯输入

voiddelay(viod);

IT0=0;

//外中断0电平触发方式

EA=1;

//开放CPU中断允许

EX0=1;

//设置外中断0中断允许

PX0=0;

//中断系统只有一个中断源,设置为低中断优先级

while

(1)

bingbing=1;

//蜂鸣器三极管截止,不叫;

green=0;

//绿灯亮

voiddelay1s()

MOVR7,#1000

DEL:

MOVR6,#500

DJNZR6,$

DJNZR7.DEL

Extern()interrupt0

bingbing=0;

//使蜂鸣器持续发声

green=1;

//绿灯灭

red=0;

//使红灯亮

delay1s();

red=1;

//红灯灭

Definebingbingp1^2//蜂鸣器输入

6.3、简述AT89S系列单片机内部中断源,并指出各中断源中断服务程序入口地址。

特殊功能寄存器TCON中与中断相关的有,TF0和TF1两位。

TF0:

定时/计数器T0计数溢出中断标志位。

TF1:

定时/计数器T1计数溢出中断标志位。

89S52内部中断源除了T0和T1外,还有定时/计数器T2和串行口中断。

定时/计数器T2中断:

定时/计数器T2的计数溢出标志位TF2为“1”,或者T2的外部中断标志位EXF2为“1”,作为有效中断请求,向CPU请求中断。

串行口中断:

串行口的接受中断标志RI(SCON.0)和发送中断标志TI(SCON.1)逻辑或以后作为内部的一个中断源。

6.4、设计一个外部事件中断计数器,使用外中断0的边缘触发方式,对外部发生的中断事件进行计数。

#include<

Unsignedchari=0;

Main()

IT0=1;

//外中断0边沿触发方式

EA=1;

EX0=1;

PX0=0;

Extern()interrupt0

{i++;

6.6、单片机系统使用12MHz的晶振,使用定时/计数器T0产生250us的定时,使P3.4输出周期为1s的方波,试编写主程序和T0中断服务程序。

计数初值为65536-250=65286=FF06H;

即计数器中TL0的初值为06H。

TH0的初值为FFH。

Sbitp3_4=p3^4;

Unsignedchara=2000;

TH0=0x06;

TL0=0xFF;

TMOD=0x01;

//T0工作在方式1

IE=0x81;

//允许T0向CPU申请中断

TR0=1;

//启动T0开始计数

While

(1);

Timer()interrupt1

TH0=0x06;

TL0=0xFF;

//重赋计数初值

a--;

if(a==0)

a=2000;

p3_4=~p3_4;

6.10、单片机系统晶振为11.0592MHz,串行口工作于方式1,波特率为4800bit/s,从串行口输出字符“AT89S52MicroComputer”。

试分别用查询方式和中断方式编写程序。

查询方式:

unsignedchara[]={“AT89S52MicroComputer\0”};

unsignedchari=0;

TMOD=0x20;

//定时器T1工作于方式2

TH1=0xFA;

TL0=0xFA;

//波特率4800

SCON=0x40;

//串行口工作于发送方式

TR1=1;

TI=1;

//便于实现循环发送数据

while(a[i]!

=0)

while(TI==0);

TI=0;

SBUF=a[i];

i++;

中断方式:

EA=1;

ES=1;

//打开串口中断

while

(1);

uart()interrupt4using1

if(TI==1)//确认是发送中断

while(a[i]!

TI=0;

6.11、0#单片机以波特率1200bit/s,从串行口发送内部RAM20H~30H单元的数据块,晶振为11.0592MHz,1#单片机从串行口接收数据,并将数据保存于其内部存储器中,试着编写程序。

0#单片机程序如下:

ORG0000H

LJMPMIAN

MIAN:

MOVTMOD,#20H;

T1工作于方式2,定时

MOVTH1,#0FDH;

波特率9600

MOVTL1,#0FDH

MOVSCON,#40H;

工作于发送方式

SETBTR0

SETBTI

MOVR0,#20H

MOVR7,#10H

WAIT:

JNBTI,WAIT;

是否发送完毕

CLRTI

MOVA,@R0

MOVSUBF,A

INCR0

DJNZR7,WAIT;

R7减一循环,直到20H~30H的内容发送完毕

SJMP$

END

1#单片机程序如下:

MOVSCON,#50H;

工作于接收方式

SETBRI

JNBRI,WAIT;

是否接收完毕

CLRRI

MOVA,SUBF

MOV@R0,A

R7减一循环,直到内容接收完毕,全部存储于20H~30H单元

附加作业

1、(例题6—2用C51编写)

编程使得蜂鸣器响铃10次,每次响铃发出250Hz的声音,维持时间为0.5s,静音1s,单片机使用12MHz的晶振。

reg51.h>

Sbitp1_0=p1^0;

Voiddelay2ms();

Voiddelay1s();

Voidmain()

Unsignedchari,j;

for(i=0;

i<

10;

i++)

{

for(j=0;

j<

20;

j++)

delay2ms();

P1_0=0;

Delay1s();

Voiddelay2ms()

MOVR7,#10

MOVR6,#100

Voiddelay1s()

2、(例题6—6用C51编写)

设计一个应用程序,使用定时/计数器T0定时方法在P1.0引脚输出周期为100ms,占空比为1:

9的周期信号,晶振选用12MHz的晶振。

由分析可知,周期100ms,占空比为1:

9,则高电平持续时间为10ms,低电平持续时间为90ms,使用定时/计数器T0产生10ms定时,T0工作于方式1,则计数初值为:

因此,

Unsignedchara=9;

TH0=0xD8;

TL0=0xF0;

IE=0x81;

For(a=9;

a>

0;

a——)

TH0=0xD8;

TL0=0xF0;

if(a==0)

{TH0=0xD8;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1