单片机的C语言程序设计与运用第2版期末复习题及答案2Word文件下载.docx
- 文档编号:16018514
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:35
- 大小:102.23KB
单片机的C语言程序设计与运用第2版期末复习题及答案2Word文件下载.docx
《单片机的C语言程序设计与运用第2版期末复习题及答案2Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机的C语言程序设计与运用第2版期末复习题及答案2Word文件下载.docx(35页珍藏版)》请在冰豆网上搜索。
EX1=1;
EA=1;
while
(1);
}
】外部中断示例4-9【例
然后外部输入一脉冲串,D1,首先通过在本实例中,P1.7口点亮发光二极管则发光二极管D1亮、暗交替。
#include<
P1_7=P1^7;
sbit
0//外部中断voidinterrupt0()interrupt0using2
P1_7=!
P1_7;
}{
main()
void
//{
开中断EA=1;
脉冲触发//外部中断0IT0=1;
//外部中断0
P1_7=0;
do{}while
(1);
3个脉冲,则灯亮、暗交替一次,可如下面编程:
如果有#include<
P17=P1^7;
Sbit
chari=3;
unsigned
main()void
EX0=1;
P17=0;
}do{}while
(1);
voidinterrupt0()interrupt0
i=i-1;
if(i==0)
P17=!
P17;
i=3;
{
S1口,两开关S0、LED【例4-10】如图4-18所示,8只阴极接至单片机P0S0LED状态。
按下P3.2分别接至单片机引脚()和P3.3()。
编写程序控制S1后,变为闪烁状态。
后,点亮8只LED;
按下
#include<
P32=P3^2;
sbit
定义延时子函数//voiddelay(unsignedintd)
while(--d>
0);
}
main()void
LED
//熄灭P0=0xFF;
脉冲触发方式1、0外中断//
//开中断
for(;
;
)//延时等待中断发生
{;
INT0_ISR()interrupt0//外中断0中断服务函数void
1voidINT1_ISR()interrupt2//外中断中断服务函数while(P32!
=0)
//如果有外部中断0,则退出{
delay(5000);
P0=0x00;
delay(5000);
P0=0xFF;
定时类
【例4-16】设单片机的fosc=12MHz,要求在P1.0上产生周期为2ms的方波。
要在P1.0上产生周期为2ms的方波,定时器应产生1ms的周期性定时,定时到对P1.0取反。
要产生1ms的定时,应选择方式1,定时器方式。
TMOD的确定:
选择定时器/计数器T0,定时器方式。
方式1,GATE不起作用,高4位为0000,TMOD=01H。
TH、TL的确定:
单片机的fosc=12MHz,则单片机的机器周期为1ms,1ms=1000ms,计数器的计数初值为65536-1000,TH0=(65536-1000)/256,TL0=(65536-1000)%6。
①采用查询方式
程序如下:
sbitP1_0=P1^0;
voidmain(void)
{TMOD=0x01;
TR0=1;
for(;
;
)
{TH0=(65536-1000)/256;
TL0=(65536-1000)%6;
do{}while(!
TF0);
P1_0=!
P1_0;
TF0=0;
②采用中断方式
voidtimer0(void)interrupt11using
P1_0=!
TH0=(65536-1000)/256;
TL0=(65536-1000)%6;
main(void)void
TMOD=0x01;
P1_0=0;
ET0=1;
TR0=1;
}while
(1);
do{
【4-1】设系统时钟频率12MH,编程实现P1.输出周期为1s的方波。
要输出周期为1s的方波,应产生500ms的周期性定时,定时到则对P1.1取反即可实现。
由于定时时间较长,一个定时器/计数器不能直接实现,一个定时器/计数器最长定时时间为65ms多一点,可以用以下两种方法实现。
(1)方法一
用定时/计数器T0产生周期性为10ms的定时,然后用一个变量对10ms计数50次。
系统时钟为12MHz,定时/计数器T0定时10ms,计数值N为10000,选方式1,方式控制字为00000001B(01H),则初值X为X=65
536-10000。
U1P1.P3.7/R1P1.P3.6/W1P1.P3.5/T1P1.P3.4/T1P1.P3.3/INT1P1.P3.2/INT1P1.P3.1/TX1P1.P3.0/RX2P2.7/A12VCP2.6/A132EP2.5/A132ALP2.4/A122PSEP2.3/A12P2.2/A12P2.1/A2P2.0/A3RSP0.7/AD3P0.6/AD3DP0.5/AD3RP0.4/AD13XTALP0.3/AD3470P0.2/AD3DP0.1/AD13RXTALP0.0/ADAT89C5470#include<
P1_1=P1^1;
定义计数变量//unsignedchari;
)main(void
//初始化{
i=0;
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%6;
EA=1;
while
(1);
time0_int(void)interrupt1中断服务程序//void
//重载初始值{
//重载初始值TL0=(65536-10000)%6;
//每发生一次中断,计数变量加i++;
1
0.5ms
次中断发生//50,if(i==50)定时P1_1=!
P1_1;
计数变量清零//i=0;
(2)方法二
用定时/计数器T1计数实现,对10ms计数50次。
定时/计数器T1工作于计数方式时,计数脉冲通过T1(P3.5)输入。
设定时/计数器T0定时时间到对P1.0取反一次,则T1(P3.5)每10ms产生一个计数脉冲,那么定时500ms只需计数25次,设定时/计数器T1工作于方式2,初值X=256-25=231,TH1=TL1=231。
因为定时/计数器T0工作于方式1,定时方式,则这时方式控制字为01100001B(61H)。
定时/计数器T0和T1都采用中断方式工作。
U1
1P1.P3.7/R1P1.P3.6/W1VCP3.5/TP1.14P1.4P3.4/T0413D1P1.3P3.3/INT1312R2P1.2P3.2/INT0211P1.1P3.1/TXD110470RP1.0P3.0/RXD28P2.7/A1527P2.6/A143126EAP2.5/A133025ALEP2.4/A122924PSENP2.3/A1123P2.2/A1022AP2.1/A921P2.0/A8932RSTP0.7/AD733BP0.6/AD634P0.5/AD535P0.4/AD41836XTAL2P0.3/AD337P0.2/AD238P0.1/AD11939XTAL1P0.0/AD0AT89C51#include<
P1_0=P1^0;
)voidmain(
初始化//TMOD=0x61;
TH1=231;
TL1=231;
ET1=1;
ET0=1;
TR1=1;
voidtime0_int(void)interrupt1//T0中断服务程序
//重载初始值{
TL0=(65536-10000)%6;
重载初始值//P1_0=!
中断服务程序//T1time1_int(void)interrupt3void
{P1_1=!
,1sP1.1引脚上输出周期为4-18【例】设系统时钟频率为12MHz,编程实现:
20%的脉冲信号占空比为,超出了0.8s,低电平占根据输出要求,脉冲信号在一个周期内高电平占0.2s产生一个基准定时配合软件计数来实0定时器的最大定时间隔,因此利用定时器个基准定50ms现。
取作为基准定时,采用工作方式1,这样这个周期需要20时,其中高电平占4个基准定时。
定义计数变量//i;
unsignedchar
//初始化
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
voidtime0_int(void)interrupt1//中断服务程序重载初始值//TH0=(65536-50000)/256;
i=i+1;
if(i==4)P1_1=0;
高电平时间到变低//
elseif(i==20)周期时间到变高//
P1_1=1;
计数变量清零//i=0;
第五章5-9【例】串行口自发自收
#defineucharunsignedchar
#defineuintunsignedint
voidmain()
uchari=0x55;
uintj=0;
//设定定时器1模式TMOD=0X20;
2
TL1=TH1=0XF4;
PCON=0X00;
SCO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 语言程序设计 运用 期末 复习题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)