第八章 8051扩展资源的C编程.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:25 大小:1.6MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

第八章 8051扩展资源的C编程.ppt

第八章8051扩展资源的C编程.ppt

预览

免费试读已结束,剩余 15 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

教学基本要求:(1)、熟悉8155接口的C编程;(2)、掌握DAC0832接口的C编程;(3)、掌握ADC0809接口的C编程;(4)、掌握键盘接口的C编程;(5)、掌握LED显示器接口的C编程。教学重点:(1)、键盘接口的C编程;(2)、LED显示器接口的C编程。教学难点:(1)、在Keil中调试各接口程序一、8155应用的C编程例:用8155控制打印机下面是打印“北京SPRING”的程序,其中汉字“北京”在硬汉字库的标准机内代码为B1B1H和BEA9H。打印机与8051采用中断的方式联络。程序名prnbyte.c.#include<absacc.h>#include<reg51.h>#defineucharunsignedchar#defineCOM8155XBYTE[0x7ff0]#definePA8155XBYTE[0x7ff1]#definePC8155XBYTE[0x7ff3]sbitBUSY=P3^3;ucharcodetrb[17]={0xb1,0xb1,0xbe,0xa9,0x20,0x53,0x50,0x52,0x49,0x4e,0x47,0x20,0x31,0x39,0x39,0x39,0x0a};/*北京SPRING1999*/uchart1=17;voidprt(uchard)/*打印一字符函数*/{PA8155=d;/*送打印字代码*/PC8155=0x00;/*产生/STB低电平*/PC8155=0x01;/*产生/STB上升沿*/while(BUSY);}voidmain(void){COM8155=0xof;/*置命令字*/prt(0x1c);/*送中文打印方式命令字高字节*/prt(0x26);/*送中文打印方式命令字低字节*/EA=1;/*开CPU中断*/EX1=1;/*开外中断1*/while(1){}}voidint1()inerrupt2using1/*打印机中断服务函数*/{uchari;EA=0;for(i=0;i<t1;i++)/*打印一串字符*/prt(tab[i]);EA=1;EX1=0;/*关打印机中断*/}二、DAC0832应用的C编程将data1和data2数据同时转换为模拟量的C51程序如下:#include<absacc.h>#include<reg51.h>#defineINPUTR1XBYTE[0x8fff]#defineINPUTR2XBYTE[0xa7ff]#defineDACRXBYTE[0x2fff]#defineucharunsignedcharvoiddac2b(data1,data2)uchardata1,data2;{INPUTR1=data1;/*送数据到一片0832*/INPUTR2=data2;/*送数据到另一片0832*/DACR=0;/*启动两路D/A同时转换*/}例2:8051与DAC0832单缓冲区接口的数据转换举例。根据片选线确定FFFEH为DAC0832的端口地址。使运行输出端输出一个锯齿波电压信号的C51程序如下:#include<absacc.h>#include<reg51.h>#defineDA0832XBYTE[0xfffe]#defineucharunsignedchar#defineuintunsignedintvoidstair(void){uchari;while(1){for(i=0;i<=255;i=I++)/*形成锯齿波输出值,最大值为255*/{DA0832=i;/*D/A转换输出*/}}}三、ADC0809应用的C编程从ADC0809的8通道轮流采集一次数据,结果送数组ad。程序如下:#include<absacc.h>#include<reg51.h>#defineucharunsignedchar#defineIN0XBYTE[0x7ff8]/*设置AD0809的通道0地址*/sbitad_busy=P3^3;/*即EOC状态*/voidad0809(ucharidata*x)/*采样结果放指针中的A/D采集函数*/{uchari;ucharxdata*ad_adr;ad_adr=&IN0;for(i=0;i<8;i++)/*处理8通道*/{*ad_adr=0;/*启动转换*/i=i;/*延时等待EOC变低*/i=i;while(ad_busy==0);/*查询等待转换结束*/x[i]=*ad_adr;/*存转换结果*/ad_adr++;/*下一通道*/}}v