南阳理工单片机题库编程题doc.docx

上传人:b****9 文档编号:25164567 上传时间:2023-06-05 格式:DOCX 页数:15 大小:18.41KB
下载 相关 举报
南阳理工单片机题库编程题doc.docx_第1页
第1页 / 共15页
南阳理工单片机题库编程题doc.docx_第2页
第2页 / 共15页
南阳理工单片机题库编程题doc.docx_第3页
第3页 / 共15页
南阳理工单片机题库编程题doc.docx_第4页
第4页 / 共15页
南阳理工单片机题库编程题doc.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

南阳理工单片机题库编程题doc.docx

《南阳理工单片机题库编程题doc.docx》由会员分享,可在线阅读,更多相关《南阳理工单片机题库编程题doc.docx(15页珍藏版)》请在冰豆网上搜索。

南阳理工单片机题库编程题doc.docx

南阳理工单片机题库编程题doc

1、设计一个2*2的行列式键盘(同在P1□)电路并编写键扫描程序。

#include

unsignedcharkey()

{

unsignedcharrow,col=0,k=-1;

P1=0xfc;

if((P1&0xfc)==0xfc)

return(k);

delay20ms();

if((P1&0xfc)==0xfc)

return(k);

for(row=0;row<2;row++)

{

P1=~(1vvrow);

k=P1&0xfc;

if(k!

=Oxfc)

{

while(k&(1«(col+2)))

col++;

k=row*2+col;

P1=0xfc;while(P1&0xfc!

=0xfc);

break;

returnk;

}

2、编写一函数to_asc,把传送给它的低半字节数据转换成ASCII码,并将其返回。

unsignedcharto_asc(chard)

{d+=0x30;

if(d>0x39)

d+=7;

returnd;

3、使用89C52串行口以工作方式3进行串口通信,假定波特率为9600b/s,单片机晶振频率为11.0592MHZo请编写全双工通信程序,以中断方式接受和发送数据,并对数据进行奇偶校验。

设发送的50个数据在片外数据区,地址从0x0010开始的区域,接收的数据保存0x80开始的区域,接收到'$'后表示结束。

#includeunsignedcharxdata*SendBuffer=0x0010;

unsignedcharxdata*RecvBuffer=0x0080;

unsignedchari,j;

bitSendOver,RecvOver;

voidmain()

{

TMOD=0x20;

TH1=0xfd;

TI1=0xfd;

TR1=1;

SCON=OxcO;

ES=1;

EA=1;

ACC=SendBuffer[i++];

TB8=P;

SBUF=ACC;

while

(1);

voidSerial()interrupt4

if(TI)

TI=O;

ACC=SendBuffer[i++];

TB8=P;

SBUF=ACC;

if(i==50)

SendOver=1;

else

{

RI=O

ACC=SBUF;

if(RB8==P)

{

RecvBuffer[j++]=ACC;

if(ACC==,$,)

RecvOver=1;

}

4、写出单片机C语言程序中语句“TMOD=Ox23;”的功能。

设置T以模式2定时,设置TO以模式3定时。

5、编写一函数查找片外RAM区域中从0x0100开始的200个单元中出现的Oxaa的次数,并将查找的结果从函数中返回。

unsignedcharfind(void)

(unsignedchardatai,d=0;

unsignedcharxdata*p;

i=200;p=0x0100;

while(i-)

if(*(p++)==0xaa)

d++;

returnd;

6、对89C52单片机编写程序,使串行口以方式1查询方式自收自发(接收和发送都需要查询),波特率为4800b/s.设单片机的晶振为11.0592MHZo

#include

voidmain()

unsignedcharc;

TMOD=0x20;

TH1=0xfa;

TLInoxfa*

TR2;

SCONH0X50"wh=e

(1)

f

wh一-e(RllH0)“Rllo;

CHSBUF*

SBUTPwh--e(Tllno)」T7P

 

7,丑牌浒咨P0口瓣任兼沛甜『p

壮一nccdeAreg5q.hv

unsignedcharcodeLESII

(Ox3foxo6ox5box4fox6uOx6dox7doxo7ox7f『0X6L0X77)

OX7COX39OX59

0X79。

OX7LOX4OOX。

 

unsignedchardispbuf[6];

voiddisp()

{

unsignedchari;

for(i=0;i<6;i++)

{

PO=LED[dispbuf[i]];

P1=1«i;

delay()

8、设fsoc=11.0592MHz,试编写一段程序其功能为对串行口初始化,使之工作与方式1,波特率为1200b/s;并用查询串行口状态的方法,读出接收缓冲区的数据并回送到发送缓冲区。

#include

voidmain()

{

unsignedcharc;

TMOD=2;

TH1=0xe8;

TL1=0xe8;

TR1=1;

SCON=0x50;

while

(1)

{

while(!

RI);

RI=O;

c=SBUF;

SBUF=c;

while(!

TI);

TI=O;

9、某MCS-51单片机系统使用定时器/计数器TO定时,从P1.0产生频率为1OOkHz等宽

矩形波。

假定单片机的晶振频率为12MHz,不考虑T1。

完成下列各问题:

(1)计算方波周期和T0的定时时间。

(2)计算T0在定时时间内的计算值;

(3)应该选T0以何种模式工作最恰当?

写出模式字TMOD的值;

(4)计算T0的定时初值;

(5)编写主函数和T0中断服务函数,使T0以中断方式P1.0产生方波。

(1)10ps,5ps

(2)5

(3)模式2,TMOD=OX22

(4)251

(5)C语言■程序

#include

sbitP10=0x90;

主函数

main()

(TMOD=Ox22;

TL0=251,TH0=251;

EA=1,ET0=1;

TR0=1;

while

(1);

TO中断服务函数:

voidint_tO(void)interrupt1

{P1_0=~P1_0;}

9・1、某MCS-51单片机系统使用定时器/计数器T1定时,产生频率为1000Hz方波声音信号,要求方波信号从P3.5引脚输出。

设fosc=6MHz,不考虑T0.完成下列各问题:

(1)计算声音信号的周期和T0的定时时间。

(2)计算T1在定时时间内的计数值;

(3)应该选T1以何种模式工作最恰当?

写出模式字TMOD的值;

(4)计算T1的定时初值;

(5)编写主函数和T1中断服务函数,使T1以中断方式P3.5引脚产生方波。

(1)1ms,500ps

(2)250

(3)模式2,TMOD=OX25

(4)6

(5)C语言程序

#include

sbitP35=P3A5;

主函数:

main()

(TMOD=Ox25;

TL1=6,TH1=6;

EA=1,ET1=1;

TR1=1;

while

(1);

T1中断服务函数:

voidint_t1(void)interrupt3{P35=~P35;}

10、写出单片机c语言程序中语句“TMOD=Ox92;“的功能。

设置T1以模式1定时、外部门控制运行,设置T0以模式2定时。

11、编写一密码锁开锁时的密码核对函数,函数入口参数为开锁者输入的6位十进制数(长整型),系统已经保存有10组密码passw,函数的功能是把输入的数与保存的密码逐个比较,正确时返回1,错误时返回0。

bitcheck_password(longdd)

(unsignedchari;

for(i=0;i<10;i++)

if(passw[i]==dd)

return1;

return0;

12、编写函数,查找code区域中从0x0030开始的100个单元中出现0x55的次数,并将查找的结果从函数中返回。

unsignedcharfind(void)

unsignedchari,dd=O;

unsignedcharcode*p;

i=100;

p=0x0030;

while(i-)

if(*(p++)==0x55)

dd++;

returndd;

13、设89C52单片机的晶振为11.0592MHz,串行口工作于方式3做数据收发,波特率为

4800b/So完成以下串行通信的初始化工作。

(1)写出T1以模式2定时作为波特率发生器的模式字;

(2)计算T1的计数初值;

(3)写出串行口控制寄存器的控制字;

(4)写出初始化程序段(包括定时器和串行口\

(1)TMOD=0x20

(2)Oxfa

(3)SCON=OxcO

(4)TMOD=0x20;

TH1=0xfa;

TL1=0xfa;

TR1=1;

SCON=OxcO;

14、编写一函数move—data,把程序存储器地址0x30开始的20个字节数据,传送到片内

RAM的数组array中。

unsignedchardataarray[20];

voidmove_data()

{unsignedchari;

unsignedcharcode*pp;

pp=0x30;

for(i=0;i<20;i++)

array[i]=*(pp+i);

}

14・3、编写一函数move—xdata,把程序存储器地址0x200开始的50个字节数据,传送到

片内RAM的数组array中。

unsignedcharxdataarray[50];

voidmove_xdata()

{unsignedchari;

unsignedcharcode*pp;

pp=0x200;

for(i=0;i<50;i++)

array[i]=*(pp+i);

}

15、设89C52单片机的晶振为11.0592MHz,串行口工作于方式3做数据收发,波特率为

9600b/So完成以下串行通信的初始化工作。

(1)写出T1以模式2定时作为波特率发生器的模式字;

(2)计算T1的计数初值;

(3)写出串行口控制寄存器的控制字;

(4)写出初始化程序段(包括定时器和串行口*

(1)TMOD=0x20

(2)Oxfa

(3)SCON=OxcO

(4)TMOD=0x20;

TH1=0xfa;

TL1=0xfa;

TR1=1;

SCON=0x50;

16、编写一函数movejdata,把片外数据存储器地址从0x0000开始的30个字节数据,传送到片内数据存储器地址从0x80开始的地方。

voidmove_idata(){unsignedchari;

unsignedcharidata*pi;

unsignedcharxdata*px;

pi=0x80;px=O;

for(i=0;i<30;i++)

*(pi+i]=*(px+i);

}}

17、某89C52单片机的P1口接8个发光二极管,拟用T1定时中断,控制P1口每250ms输出一次做右移流水灯显示,电路如图所示。

设晶振为6MHz,不考虑TOo完成下列各问题:

(1)P1口各位输出高电平还是低电平发光二极管亮?

(2)拟使T1定时多少ms、中断多少次使P1输出一次?

(3)拟选T1以模式几定时?

写出模式字TMOD的值;

(4)计算T1的定时初值;

(5)编写主函数和T1中断服务函数,实现流水灯功能。

(1)低电平发光二极管亮

(2)125ms;2次

(3)模式1,TMOD=OX11

(4)3036

(5)0语言程序#include

unsignedcharaa=0x80;

主函数:

main()

(TMOD=Ox21;

TL1=220,TH1=11;

EA=1,ET1=1;

TR1=1;

P1=~aa;

while

(1);

T1中断服务函数:

voidint_t1(void)interrupt3

{TL0=220,TH0=11;

aa«=1;

P1=~aa;

}

18、编写一函数,对无符号字符型数组用冒泡法从小到大进行排序,函数的入口参数为拟

排序的数组aa的数组的长度mo

voidsort(unsignedcharaa,unsignedcharm)

{unsignedcharl,j,n,tem;

for(i=0;i

fo「(j=0;jvn;j++)

{if(aaO]>aaO+1])

{tem=aa[j];

aa[j]=aa[j+1];

aa[j+1]=tem;

}}))

19、在一个fosc为12MHz的89C52系统中接有一片ADC0809,它的地址为7FFFH,试编写ADC0809初始化程序和定时采样通道2的程序(假设采样频率为1ms/次,每次采样4个数据X

#include

#include

defineDAC0809XBYTE[0x7fff]

unsignedcharxdatabuffer[4]_at_OxaO;

voidmain()

TMOD=0x01;

TH0=0xFC;

TL0=0x18;

EA=1;

ET0=1;

TR0=1;

DAC0809=2;

while

(1);

}

voidtimeO_srv()interrupt1

{

unsignedchari;

TH0=0xFC;

TL0=0x18;

for(i=0;i<4;i++)

{

DAC0809=2;

delay();

buffer[i]=DAC0809;

20、设某MCS-51单片机系统的振荡频率为12MHz,编写程序,用定时器/计数器TO以模式

1定时,中断方式在P1.0引脚产生周期为1000ps的方波。

假设没有使用T0.

(1)定时时间为1000ps/2,

计数值为1000|js/2/机器周期=500,T0初值为65036

(2)(3语言程序:

#include

sbitP10=P1A0;

主函数:

main()

{TMOD=Ox21;

TL0=12;TH0=254;

EA=1;ET0=1;

TR0=1;

while

(1);

TO中断服务函数:

voidint_tO(void)interrupt1

{TL0=12;TH0=254;P10=~P10;

}

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

当前位置:首页 > 幼儿教育 > 少儿英语

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

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