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

2018-11-27 18:30

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

#include unsigned char key() {

unsigned char row,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=~(1<

while(k&(1<<(col+2))) col++; k=row*2+col; P1=0xfc;

while(P1&0xfc!=0xfc); break; } } return k; }

2、 编写一函数to_asc,把传送给它的低半字节数据转换成ASCII码,并将其返回。 unsigned char to_asc(char d) { d+=0x30; if(d>0x39) d+=7; return d; }

3、 使用89C52串行口以工作方式3进行串口通信,假定波特率为9600b/s,单片机晶振频率为11.0592MHz。请编写全双工通信程序,以中断方式接受和发送数据,并对数据进行奇偶校验。设发送的50个数据在片外数据区,地址从0x0010开始的区域,接收的数据保存0x80开始的区域,接收到‘$’后表示结束。

#include

unsigned char xdata *SendBuffer=0x0010;

unsigned char xdata *RecvBuffer=0x0080; unsigned char i,j; bit SendOver,RecvOver; void main() {

TMOD=0x20; TH1=0xfd; Tl1=0xfd; TR1=1; SCON=0xc0; ES=1; EA=1;

ACC=SendBuffer[i++]; TB8=P; SBUF=ACC; while(1); }

void Serial() interrupt 4 { if(TI) { TI=0;

ACC=SendBuffer[i++]; TB8=P; SBUF=ACC; if(i==50) SendOver=1; } else { RI=0 ACC=SBUF; if(RB8==P) { RecvBuffer[j++]=ACC; if(ACC=='$') RecvOver=1; } } }

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

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

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

unsigned char find(void) { unsigned char data i, d=0; unsigned char xdata *p; i=200; p=0x0100; while(i--) if(*(p++)==0xaa) d++; return d; }

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

#include void main() {

unsigned char c; TMOD=0x20; TH1=0xfa;


南阳理工单片机题库-编程题.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:广东重点农业龙头企业申报表

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: