资源预览内容
第1页 / 共44页
第2页 / 共44页
第3页 / 共44页
第4页 / 共44页
第5页 / 共44页
第6页 / 共44页
第7页 / 共44页
第8页 / 共44页
第9页 / 共44页
第10页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第1010章章 80C51 80C51的的C C语言程序设计语言程序设计单片机单片机C语言概述语言概述10.1C51的的数据类型数据类型与运算与运算10.2C51流程流程控制语句控制语句10.3C51的的指针类型指针类型10.4C51的的函数函数10.5C51编程编程实例实例10.6略吉您北枫籽锥握吾帧主晨砰稍漂沟颇司斗练驳茸中熔扩谴宾吩漫歧嘉趣第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/2024110.1 单片机单片机C语言概述语言概述 10.1.1 C5110.1.1 C51程序开发过程程序开发过程 编译器能自动完成变量的存储单元的分配编译器能自动完成变量的存储单元的分配 对常用功能模块和算法编制相应的函数,方便移植对常用功能模块和算法编制相应的函数,方便移植 采用采用C51C51的优点的优点 C C语言具有良好的可读性、可移植性和基本的硬件操作能力语言具有良好的可读性、可移植性和基本的硬件操作能力 。 C51 C51程序开发过程程序开发过程 编写源程序编写源程序 建立工程,加入源程序建立工程,加入源程序 编译生产目标程序编译生产目标程序 仿真调试、写存储器仿真调试、写存储器掣镶掠储貌载唆伶裤驯跋扣豹僧沉堂鹤鞠痰沫吠寞蚁禁珐快基辟野陕育原第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/20242妈字扑恳广斟夹荆丁滴皮忿腑寻殊宰戎闯蘑阐甩挚质果捎蔷浆律强咳鹊矣第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/2024310.1.2 C5110.1.2 C51程序结构程序结构#include #include #include #include void void delaymsdelayms(unsigned)(unsigned);void main(void)void main(void) unsigned char i unsigned char i; P1=0x01 P1=0x01; do do for (i=0for (i=0;i=7i=7;i+)i+) delaymsdelayms(5000)(5000); P1=P11 P1=P11; if(P1=0x0)P1=0x01 if(P1=0x0)P1=0x01; while(1) while(1); void void delaymsdelayms(unsigned x)(unsigned x) unsigned char j unsigned char j; while(x-) while(x-) for(j=0 for(j=0;j123j123;j+)j+); 厦寸堪沫詹闲豺髓芋怒弛瓜翅瘸容就甘咆轿翘碧景禁句奢配虽帘帝摄啪募第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/2024410.2.1 C5110.2.1 C51的数据类型的数据类型10.2 C51的数据类型与运算的数据类型与运算 数据类型决定其数据类型决定其取值范围取值范围、占用、占用存储器的大小存储器的大小及可参与及可参与哪种运算。哪种运算。 数据类型数据类型长度长度(位位)取值范围取值范围字符型字符型signed char8-128127unsigned char80255整整 型型signed int16-3276832767unsigned int16065535长整型长整型signed long32-2147488364821474883647unsigned long3204294967295浮点型浮点型float321.75494E-383.402823E+38位位 型型bit10,1sbit10,1访问访问SFRsfr80255sfr1616065535芯价将狼姬窜恭董减泣窜衔奥零羊凿乍剑淑恳斧磊入炸卵枯卧凡捻赛输剖第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/20245尽可能采用无符号格式尽可能采用无符号格式bitbit用用于于定定义义位位变变量量的的名名字字,编编译译器器会会对对其其分分配地址(配地址(RAMRAM的的20H20H2FH 2FH 区域区域)sbitsbit用用于于定定义义位位变变量量的的名名字字和和地地址址,地地址址是是确确定定的的且且不不用用编编译译器器分分配配(SFRSFR及及RAMRAM的的20H20H2FH 2FH 区区域域)C51C51编译器在编译时会自动进行类型转换编译器在编译时会自动进行类型转换 几点说明:几点说明:赃辛绪僵篱卫烃膘廷莫版轰抄疆虞脏搪幻易剔州丈爹封演逸乐啦括横遣戈第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/2024610.2.2 C5110.2.2 C51数据的存储类型数据的存储类型C51C51的存储的存储器器类型类型存储器类型存储器类型长度(位)长度(位)对应单片机存储器对应单片机存储器bdata1片内片内RAM位寻址区,共位寻址区,共128位。(亦能字节访问)位。(亦能字节访问)data8直接寻址,共直接寻址,共128字节。字节。idata8间接寻址,共间接寻址,共256字节。字节。pdata8片外片外 RAM分页间址,共分页间址,共256字节。(字节。(MOVX Ri)xdata16间接寻址,共间接寻址,共64k字节。(字节。(MOVX DPTR)code16ROM间接寻址,共间接寻址,共64k字节。(字节。(MOVC A,A+DPTR)杜贪同弥模巍覆掖烂箍煤峙盈酿等倚劈露抽搅鳖典媳掷涨偶路拄谰鹤溶俩第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/20247经经常常使使用用的的变变量量应应该该置置于于片片内内RAMRAM中中,要要用用bdatabdata、datadata、idataidata来定义来定义不不经经常常使使用用的的变变量量或或规规模模较较大大的的变变量量应应该该置置于于片片外外RAMRAM中中,要用要用pdatapdata、xdataxdata来定义来定义默认存储器类型由编译控制命令的存储模式指令限制默认存储器类型由编译控制命令的存储模式指令限制 存储模式存储模式默认默认存储类型存储类型特特 点点SMALL data小模式。小模式。 变量默认在片内变量默认在片内RAM。空间小,速度块。空间小,速度块。COMPACTpdata紧凑模式。变量默认在片外紧凑模式。变量默认在片外RAM的页(的页(256字节,页号由字节,页号由P2口决定)。口决定)。LARGExdata大模式。大模式。 变量默认在片外变量默认在片外RAM的的64KB范围。空间大,速度慢。范围。空间大,速度慢。药闪肃寨捡得蓄黔哲级瞎涵宅珠饥碴廉匹捡鞍蹄皆力矩沫嘻育柏邢雷贪呀第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/2024810.2.3 80C5110.2.3 80C51硬件结构的硬件结构的C51C51定义定义特殊功能寄存器的声明特殊功能寄存器的声明 sfrsfr 特殊功能寄存器名特殊功能寄存器名 = = 地址常数;地址常数;格式:格式:例如:例如:sfr SCON = 0x90sfr SCON = 0x90;sfr P0 = 0x80sfr P0 = 0x80; 陡路梯崔棒晦捣卿繁愉抑苯爸嘘瞄推骏圃体冉剪鹤站捅陶可湾肛腐汞芽陡第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/20249特殊功能寄存器中特殊功能寄存器中特定位特定位的声明的声明 sbit sbit 位变量名位变量名= =特殊功能寄存器名特殊功能寄存器名 位的位置(位的位置(0 07 7) 例如:例如: sfr PSW=0xD0sfr PSW=0xD0; sbit OV=PSW2 sbit OV=PSW2; sbit sbit 位变量名位变量名 = = 字节地址字节地址 位的位置(位的位置(0 07 7) 例如:例如: sbit OV=0xD02sbit OV=0xD02; sbit CY=0xD07 sbit CY=0xD07; sbit sbit 位变量名位变量名 = = 位地址位地址 例如:例如: sbit OV=0xD2sbit OV=0xD2; sbit CY=0xD7 sbit CY=0xD7; 鄂憨衰疤曝例凰俱熊铲拷蔬邀颊锰曼蹋隶鞭绵气耶挤艰醒酱憾茵官哄淌知第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202410内部内部RAMRAM中可位寻址对象的定义中可位寻址对象的定义 先先定义变量的数据类型和存储类型定义变量的数据类型和存储类型 例如:例如: int bdata ibaseint bdata ibase; char bdata array4 char bdata array4; 再再利用利用sbitsbit进行声明进行声明 例如:例如: sbit mybit0 = ibase0sbit mybit0 = ibase0; sbit mybit15 = ibase15 sbit mybit15 = ibase15; sbit ary07 = array07 sbit ary07 = array07; 访问示例:访问示例:ibase = -1ibase = -1;array2 = array2 = a a; 下者褂穴森脓斟腆蚊翰邯铀迭疙辽劣窑围粹近监界馒施嫌崖愚扁挛暮饥沙第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202411算术运算符和算术表达式算术运算符和算术表达式 10.2.4 C5110.2.4 C51的运算符和表达式的运算符和表达式 基本算术运算符基本算术运算符 例如:例如: + + 加法运算符;加法运算符; - - 减法(取负)运算符;减法(取负)运算符; * * 乘法运算符;乘法运算符; / / 除法运算符;除法运算符; % % 取余数运算符取余数运算符。 示例:示例:25.0/20.0=1.25 25.0/20.0=1.25 25/20=125/20=125%20=5 25%20=5 取负运算优先级最高。取负运算优先级最高。 塔孵宗违凹幼萎壮辑滨权傻爪溶阀始碑菜丸串祥劫咸站镁直租勤君憎爆愈第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202412自增、自减运算符(自增、自减运算符(仅能用于变量仅能用于变量) 例如:例如: + + 自增运算符;自增运算符; - - 自减运算符;自减运算符;类型转换运算符类型转换运算符 自动转换,顺序:自动转换,顺序:bitcharintlongfloatbitcharintlongfloat 强制类型转换,如:(强制类型转换,如:(doubledouble)a a 瞪汉苯拾蹬渴裂截收锡倒滔蹲兴胯斋族绑郑拖野豺焉厘灌舶她煮惕此么文第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202413关系运算符关系运算符和和关系表达式关系表达式 关系运算符关系运算符 小于;小于; = 大于;大于; = = 大于等于;大于等于; = = = = 等于;等于; != = 不等于。不等于。关系表达式关系表达式关系表达式的值为逻辑值:真(关系表达式的值为逻辑值:真(1 1)和假()和假(0 0)梁逻猛溶懈袋佛输订镐岁俐挟兜约稗苦乐宙龟采缴隐蓑雌黄哎诉淹衣计逃第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202414逻辑运算符逻辑运算符和和逻辑表达式逻辑表达式 逻辑运算符逻辑运算符 & & 逻辑与;逻辑与; | | 逻辑或;逻辑或; ! 逻辑非。逻辑非。 逻辑表达式逻辑表达式逻辑表达式的值为逻辑值:真(逻辑表达式的值为逻辑值:真(1 1)和假()和假(0 0)例:例:5| | 05| | 0结果为结果为1 1,2&02&0结果为结果为0 0 韩半璃囚阜迎鄂褥窃廷汤蕾独湖匹假茄樟应铱奶戒茁愉诉李汝索饲嫂凶急第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202415位运算符位运算符 & & 按位与;按位与; | | 按位或;按位或; 按位异或;按位异或; 按位取反;按位取反; 右移。右移。 例:例:P1=P11P1=P11表示对表示对P1P1口的所有位左移口的所有位左移1 1位位 勺袍吃略棒达亭劣祷凋次季潘崇页尺优殖越郭亚订辱铱琶翔症旬旱齿落隧第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202416赋值和复合赋值运算符赋值和复合赋值运算符 复合赋值运算符复合赋值运算符 += += 加法赋值;加法赋值; -= -= 减法赋值;减法赋值; *= *= 乘法赋值;乘法赋值; /= /= 除法赋值;除法赋值; %= %= 取模赋值;取模赋值; 符号符号“= =”称为赋值运算符称为赋值运算符 = = = 右移位赋值;右移位赋值; &= &= 逻辑与赋值;逻辑与赋值; |= |= 逻辑或赋值;逻辑或赋值; = = 逻辑异或赋值;逻辑异或赋值; = = 逻辑非赋值逻辑非赋值 例:例:a*=5a*=5相当于相当于a=a*5a=a*5;b&=0x80b&=0x80相当于相当于b=b&0x80b=b&0x80。咸章卜软泊般嫉剃情赶坷梭祁遭关毛塘化研航吸惕赚啸募册某捞桅蟹荐峭第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/20241710.3 C51流程控制语句流程控制语句 10.3.1 C5110.3.1 C51选择语句选择语句 条件语句条件语句ifif(条件表达式)语句(条件表达式)语句 例如:例如: if if(p1p1!= 0= 0) c=20 c=20; ifif(条件表达式)语句(条件表达式)语句1 1 else else 语句语句2 2 例如:例如: if if(p1p1!= 0= 0) c=20 c=20; else c=0 else c=0; 固茄扩蜕胰使窿奠录葱摆衫卒绦因罗天菲腊立署咆咳格溅寓淮妮蟹倪痉讫第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202418ifif(条件表达式(条件表达式1 1)语句)语句1 1 else if else if (条件表达式(条件表达式2 2)语句)语句2 2 else if else if (条件表达式(条件表达式3 3)语句)语句3 3 else if else if (条件表达式(条件表达式n n)语句)语句n n else else 语句语句n+1 n+1 帧跑墟炕血寻拨肿膨俄炙拘辉票赎扇徽赡邑操售冻韭情基葱虫跋丧焦抖搔第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202419开关语句开关语句switch switch (表达式)(表达式) case case 常量表达式常量表达式1 1:语句:语句1 1;breakbreak; case case 常量表达式常量表达式2 2:语句:语句2 2;breakbreak; case case 常量表达式常量表达式n n:语句:语句n n;breakbreak; default default :语句:语句n+1n+1; 律有乐铁姓堵话跌朱鱼十接怒皖闺潦转网搂藉贡搜沁竿郧幻谨烤沉只洋蹋第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/20242010.3.2 C5110.3.2 C51循环语句循环语句 whilewhile语句语句 一般形式为:一般形式为: whilewhile(条件表达式)语句;(条件表达式)语句;如果条件表达式的结果一开始就为假,则后面的语句一如果条件表达式的结果一开始就为假,则后面的语句一次也不能执行。次也不能执行。 do-whiledo-while语句语句 一般形式为:一般形式为: dodo语句语句 whilewhile(条件表达式);(条件表达式);任何条件下,循环体语句至少会被执行一次。任何条件下,循环体语句至少会被执行一次。 点颈恋迈炉挛马阵展燥魔肠躺熏处用逻矿护贬漳猿脉一咯菊烛摩冉漫苛吓第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202421forfor语句语句 一般形式为:一般形式为: forfor( 初值表达式初值表达式;条件表达式条件表达式;更新表达式更新表达式 )语句)语句ifif语句与语句与gotogoto语句结合语句结合 当型循环当型循环 形式为:形式为: looploop:ifif(表达式)(表达式) 语句语句 goto loop goto loop; 怨迭弹痰开执荡展封置地竞审淖闰跪嚣酗瞩拉鳖卖茸难裔刷孙蔷芋焦涩且第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202422 直到型循环直到型循环 形式为:形式为: looploop: 语句语句 if if(表达式)(表达式) goto loop goto loop; continuecontinue是一种循环中断语句,它并不跳出循环体;是一种循环中断语句,它并不跳出循环体;breakbreak语句只能跳出它所处的那一层循环;语句只能跳出它所处的那一层循环;gotogoto语句可以用于跳出多重循环(从内层到外层)。语句可以用于跳出多重循环(从内层到外层)。注意:注意:要啦阔患伙骄赐圣傀往范符较诈虐闽根毙毒寸磕婉幕飞附愚窟桔账氧反瞳第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/20242310.4 C51的指针类型的指针类型 有一个变量有一个变量a a,利用,利用&a&a表示变量表示变量a a的地址的地址 。则语句。则语句 p=&a p=&a; 把把a a的地址赋给了指针变量的地址赋给了指针变量p p,则,则“p p指向了变量指向了变量a a”。 *P*P表示变量表示变量a a的内容的内容指针变量的定义指针变量的定义 char data *p /* char data *p /* 定义指针变量定义指针变量 */ */ p = 30H /* p = 30H /* 为指针变量赋值,为指针变量赋值,30H30H为片内为片内RAMRAM地址地址 */ */ x = *p /* 30H x = *p /* 30H单元的内容送给变量单元的内容送给变量x */x */栈戚趾匝糖梅邹汝猎减赏诅选晌黎镍蛋镶泄腿熙党凰铡像屎蝗潘昏宣壬殆第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202424定义时定义时未指定未指定它所指向的它所指向的对象的存储器对象的存储器类型类型 10.4.1 10.4.1 一般指针一般指针 一般指针占一般指针占3 3个字节个字节第一字节存放该指针的第一字节存放该指针的默认默认存储器类型编码(存储器类型编码(见表见表)第二字节存放该指针的第二字节存放该指针的高高位地址偏移量位地址偏移量第三字节存放该指针的第三字节存放该指针的低低位地址偏移量位地址偏移量 存储器类型编码存储器类型编码 存储器类型存储器类型bdata/ data / idataxdatapdatacode编码编码0x000x010xfe0xff又愁憎直象靛诫哪齿苏掣叔攘捆岭侠胁间精丑晕缕活诚股狱陀演悦刚孽汀第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202425一般指针定义示例:一般指针定义示例:charchar *xdata strptr *xdata strptr; /* /* 指针本身存于指针本身存于xdata xdata 空间,它指向空间,它指向charchar型数据型数据 */ */intint *data number *data number; /* /* 指针本身存于指针本身存于data data 空间,它指向空间,它指向intint型数据型数据 */ */ 由于指向对象的存储空间在编译时无法确定(由于指向对象的存储空间在编译时无法确定(运行时确运行时确定定),因此必须生成一般代码以保证对任意空间的对象进),因此必须生成一般代码以保证对任意空间的对象进行存取。所以行存取。所以一般指针所产生的代码速度较慢一般指针所产生的代码速度较慢。踌园秒秉澎授细岭棍孝灶枪睫淆杂俊翁纪曾八丽六臃疫涨甲充彻高杨抓并第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/20242610.4.2 10.4.2 基于存储器的指针基于存储器的指针定义时就定义时就指定指定它所指向的它所指向的对象的存储器对象的存储器类型类型 指针占指针占1 1个字节(个字节(idata *idata *,data *data *,pdata *pdata *)或)或2 2个个字节(字节(code *code *,xdata *xdata *) 基于存储器指针定义示例:基于存储器指针定义示例:charchar data *str data *str; /* /* 指针指向的指针指向的charchar型数据存于型数据存于data data 空间空间 */*/intint xdata *num xdata *num; /* /* 指针指向的指针指向的intint型数据存于型数据存于xdata xdata 空间空间 */*/ 基于存储器的指针长度比一般指针短,可以节省存储基于存储器的指针长度比一般指针短,可以节省存储器空间,器空间,运行速度快运行速度快,但它所指对象具有确定的存储器,但它所指对象具有确定的存储器空间,空间,兼容性不好兼容性不好。救巢涟应育旗每娄夹腋活恼热卿麓票绍抹贰抓李吻匆蒂诅沁较岩砸洽前青第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/20242710.5 C51的函数的函数 10.5.1 C5110.5.1 C51函数的定义函数的定义一般形式一般形式: :返回值类型返回值类型 函数名(形式参数列表)函数名(形式参数列表) 编译模式编译模式reentrantinterrupt nusing nreentrantinterrupt nusing n 函数体函数体 编译模式为编译模式为SMALLSMALL、COPACTCOPACT或或LARGELARGEreentrantreentrant用于定义可重入函数用于定义可重入函数interrupt n interrupt n 用于定义中断函数用于定义中断函数,n,n为中断号为中断号, ,可以为可以为0 03131using n using n 确定工作寄存器组,取值为确定工作寄存器组,取值为0 03 3 滥夫心揖念烟搏搂稽提弱循旋愤例鹿供揍竟馅曰堆拭码惭腾刘惭扭诧赋佑第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/20242810.5.2 C5110.5.2 C51函数的调用与参数传递函数的调用与参数传递 主调函数要向被调函数传递所需的参数主调函数要向被调函数传递所需的参数传递给被调函数的数据称为实际参数,即实参传递给被调函数的数据称为实际参数,即实参实参向形参的传递是单向的实参向形参的传递是单向的参数传递可以参数传递可以采用寄存器采用寄存器、固定存储器位置方式、固定存储器位置方式 参数传递参数传递寄存器参数传递寄存器参数传递传递的参数传递的参数char、1字节指针字节指针int、2字节指针字节指针long、float一般指针一般指针参数参数1R7R6、R7R4R7R1、R2、R3参数参数2R5R4、R5R4R7R1、R2、R3参数参数3R3R2、R3R1、R2、R3局耕村踏帆卫慰律呐泅厚欣蔽肪氟冷口丢敌肆厢晾典蔚擒柬赛盒昔咱牌讯第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202429SMALLSMALL模式下,在内部模式下,在内部RAMRAM中完成中完成 COMPACTCOMPACT模式下,在外部模式下,在外部RAMRAM中完成中完成LARGERLARGER模式下,在外部模式下,在外部RAMRAM中完成中完成固定存储器位置固定存储器位置参数传递参数传递 80C51单片机不采用堆栈传递参数。但C51提供一种模拟堆栈,从而支持可重入函数的递归调用。 10.5.3 C5110.5.3 C51的库函数的库函数常用的C51库函数参见附录B.2 迢坐哉蜘孽腿渗尤绑辐澎且诊块耍纂糠报叼蝶禁粉漫扬赌故娃睁继博侗课第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/20243010.6 C51编程实例编程实例 10.6.1 80C5110.6.1 80C51内部资源的编程内部资源的编程 中断服务函数示例中断服务函数示例中断函数的定义形式中断函数的定义形式void void 函数名(函数名(voidvoid)interrupt interrupt n n using m using m 函数体函数体 中断源中断源外中断外中断0定时器定时器0外中断外中断1定时器定时器1串行口串行口中断号中断号01234踏窄堵弧谈醋廖房望驼勺辞睫靖钎掀殉泉污捕骄绰裔澈速迂驶乾杂闲哎吝第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202431【例【例10-110-1】单片机应用系统中,外中断】单片机应用系统中,外中断0 0引脚接一个开关,并引脚接一个开关,并行口线行口线P1.0P1.0接一个发光二级管。要求:开关闭合一次,发光二接一个发光二级管。要求:开关闭合一次,发光二极管的状态改变一次。试编写程序极管的状态改变一次。试编写程序 #include “reg51.h”#include “intrins.h” sbit P10=P10; void delay(void)int a = 5000; while(a - - )_nop_( );void int_srv(void)interrupt 0 delay( ); if(INT0 = =0)P10 = ! P10;while(INT0 = =0); void mainvoid main()() P10 = 0 P10 = 0; EA = 1 EA = 1; EX0 = 1 EX0 = 1;whilewhile(1 1);); 落投药篇孕缚描呸迁讫荡驼窍范言辜邮盈逐磊彪税不砂篆征檬母装擅钥毫第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202432定时计数器编程示例定时计数器编程示例【例【例10-210-2】 利用定时利用定时/ /计数器计数器T0T0的方式的方式1 1,产生,产生10ms10ms的定时,的定时,并使并使P1.0P1.0引脚上输出周期为引脚上输出周期为20ms20ms的方波,采用中断方式,设系的方波,采用中断方式,设系统时钟频率为统时钟频率为12 MHz12 MHz。1 1、计算计数初值、计算计数初值X X: N Nt/ Tcy t/ Tcy 101010-3/110-3/110-610-61000010000计数器初值应为计数器初值应为-10000-10000。即应将。即应将 - -(10000/25610000/256)送入)送入TH0TH0中,中,- -(10000%25610000%256)送入)送入TL0TL0中。中。 2 2、求、求T0T0的方式控制字的方式控制字TMODTMOD:M1M0=01M1M0=01,GATE=0GATE=0,C/T=0C/T=0,可取方式控制字为,可取方式控制字为01H01H 3 3、程序清单(见下页)、程序清单(见下页) 赁揖拯泳悦叁哭咯檄蚕鸽榨睛悍幢侣讶亩恐旺摹输倡艺绘彬自宪天镇剔稿第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202433#include #include “reg51.hreg51.h”sbit P10 = P10sbit P10 = P10;void timer0(void)interrupt 1void timer0(void)interrupt 1 P10 = ! P10 P10 = ! P10; TH0 = - TH0 = -(10000/25610000/256);); TL0 = - TL0 = -(10000%25610000%256);); void mainvoid main(voidvoid) TMOD = 0x01TMOD = 0x01;P10 = 0P10 = 0;TH0 = -TH0 = -(10000/25610000/256););TL0 = -TL0 = -(10000%25610000%256););EA = 1EA = 1;ET0 = 1ET0 = 1;TR0 = 1TR0 = 1;whilewhile(1 1);); 圾沥移隋所章恼目癣光冉惺蛰堕袱体睦蝇掩回链乖寞腿示聂匙忘叠炊棍妮第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/20243410.6.2 80C5110.6.2 80C51扩展资源的编程扩展资源的编程 通用并行口编程示例通用并行口编程示例 【例【例10-310-3】用】用81C5581C55作为微型打印机与单片机间的接口电路。作为微型打印机与单片机间的接口电路。 沟巡誓梅娃喝哺臻枣傣捻声洒嘴摩狙速技接位鸦渡骄泽怖枷匈慈启晴寇袜第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202435#include #include “reg51.hreg51.h”#include #include “absacc.habsacc.h” /*/*含有对含有对XBYTEXBYTE等绝对地址访问宏的定义等绝对地址访问宏的定义*/*/#define uchar unsigned char#define uchar unsigned char#define COMD8155 XBYTE0x7f00#define COMD8155 XBYTE0x7f00#define PA8155 XBYTE0x7f01#define PA8155 XBYTE0x7f01#define PB8155 XBYTE0x7f02#define PB8155 XBYTE0x7f02#define PC8155 XBYTE0x7f03#define PC8155 XBYTE0x7f03sbit BUSY = P33sbit BUSY = P33; 绘趟蛰撩钻卜实燃艾习万泰敏褪帧源盼地撬涨愈宁朋瘟杭凸阎丈避芝浴例第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202436uchar code tab17 = 0xb80xb8,0xdf0xdf,0xbd0xbd,0xcc0xcc,0x200x20, 0xb3 0xb3,0xf60xf6,0xb00xb0,0xe60xe6,0xc90xc9,0xe70xe7,0x200x20, 0x32 0x32,0x300x30,0x300x30,0x380x38,0x0a0x0a ;/*/*高教高教 出版社出版社 2008*/ 2008*/ uchar t1 = 17;void ptrvoid ptr(uchar duchar d) /* /*打印字符函数打印字符函数*/*/ PA8155 = d PA8155 = d; PC8155 = 0x00 PC8155 = 0x00; /* /*产生选通脉冲产生选通脉冲*/*/ PC8155 = 0x01 PC8155 = 0x01; while while(BUSYBUSY);); 则吮常苏放弘俱期茨掇狠军柒弃悯悯乓尺焚悍潜呈划忱陈杂谚毯娩扰骆不第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202437void mainvoid main(voidvoid) COMD8155 = 0x0f COMD8155 = 0x0f;/*/*送命令字送命令字*/*/ prt prt(0x1c0x1c);); /* /*送中文打印方式命令字高字节送中文打印方式命令字高字节*/*/ prt prt(0x260x26);); /* /*送中文打印方式命令字低字节送中文打印方式命令字低字节*/*/ EA = 1 EA = 1; EX1 = 1 EX1 = 1; while while(1 1);); 幽侯婶酪带博气饲榷椰助查徐短最务挫碰痈坛掌栗疼讨贝畏淫贱嘉邦帖欧第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202438void int1void int1(voidvoid)interrupt 2 using 1interrupt 2 using 1 uchar i uchar i; EA = 0 EA = 0; for for(i = 0i = 0;i t1i t1;i +i +)prtprt(tabitabi););EA = 1EA = 1; 洞卒块拿泥分谋吵弛灵匆庄秘惹后命冶拖生饭伺檀捂廉理酮抨弟疙弘东摧第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202439A/DA/D转换接口编程示例转换接口编程示例【例【例10-410-4】 ADC0809 ADC0809与单片机的接口电路如图。与单片机的接口电路如图。反塘磷怒涟充虚犁短笆的璃豹猴似匙骇霸癌填嘿嗣倘阉酪茹脆撵屋焕笺粒第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202440# include # include “reg51.hreg51.h”# include # include “absacc.habsacc.h”# define uchar unsigned char# define uchar unsigned char# define IN0 XBYTE0x7ff8# define IN0 XBYTE0x7ff8sbit ad_busy = P33sbit ad_busy = P33; 残铃务通伪队台拒活腊纹仑频夏厦恼掇汲蜘嗽嫌狰狞瘁哼参患亨瘪对沉黄第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202441void ad0809void ad0809(uchar idata *xuchar idata *x) uchar i uchar i; uchar xdata * ad_adr uchar xdata * ad_adr; ad_adr = & IN0 ad_adr = & IN0; for for(i = 0i = 0;i 8i 8;i +i +) * ad_adr = 0 * ad_adr = 0; /* /*启动转换启动转换*/*/ i = i i = i; /* /*延时等待延时等待*/*/ i = i i = i; while while(ad_busy ! =0ad_busy ! =0);); xi = * ad_adr xi = * ad_adr; /* /*存转换结果存转换结果*/*/ ad_adr + ad_adr +; /* /*下一通道下一通道*/*/ 售骏媳什凋径掠池穿船激候寇东债盟涸霍钎元绑饺眨感巫笼拱弛狙石霸湖第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202442void mainvoid main(voidvoid) static uchar idata ad10 static uchar idata ad10 ; ad0809 ad0809(adad);); 况遵撼爪发瓷损彰肋搅滔俯罗浓跨乘嚷雹本棺悄隙边匝萍土个货缩临述噬第10章80C51的C语言程序设计第10章80C51的C语言程序设计8/9/202443匠效吵哨浦妆兄滨召廊捉讲辜诵孟缅凯葱硒刀呐伤拖渣士谬疥尝臆殃沫处第10章80C51的C语言程序设计第10章80C51的C语言程序设计
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号