单片机C语言编程与.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机 C 语言编程与或|头文件常见问题 一、常见问题 1、头文件reg51.h 和reg52.h 其实是一样的,大家两个都可以用。 2、main()前面的void 可加可不加,反正都是无返回值函数。 3、不是每一个程序都要用到死循环 while(1),例如点亮一颗 LED 小灯就不用,只要执行一次就一直是高电平了不用循环。 4、位操作和字节操作都能用来控制 I/O 口输出电平, 位操作需要实现声明 sbit,而字节操作则不用。 5、延时程序有两种 a:循环延时;b:定时器精确延 时 6、如果定义的变量没有置初值,那么默认初值就是 零。 7、定义数组时(如:number[]={1,2,3,4,5,6,};) 则结束时要加分号,每个元素之间用逗号隔开,[ ]内可加可不加元素个数。 8、当程序比较复杂时,可将程序模块化,在主函数 前定义,主函数内引用,但要注意全局变量和局部变量 的区别。 9、有的数组前面加code 意思为将该数组写入FLASH 中,数组内容不变,若不加 code 则写入ram 中。 10、能不能不进行位操作,直接用 P0^0 赋值?不可以,因为 P0^0 中有异或符号,所以必须进行位操作之后才可以正常赋值。 11、转串芯片 PL2303 为国产芯片,在线仿真时波特率最高为 14400,太高会造成程序下载失败。 12、STC89C52 程序存储空间是 8KFLASH,当下载Hex 文件时,有的同学可能注意到文件超过了 8K,认为存储空间不够,这种说法是错误的,看程序所占空间大小应该在keil 软件下,code 后面的字节数。 二、头文件 1、头文件如果 keil 软件库中没有的话,需要自己编写,并且要添加到所在工程中,或者直接复制一份到keil 软件C51mdash;mdash;;INC 文件夹下,这样就可 以直接引用头文件。 三、变量 将函数模块化时经常用到静态变量。四、与,或| 有时在程序中也会看到这样的程序语言,a=b;这样的语 句相当于:a=ab 同理,a|=b;这样的语句相当于:a=a|b 五、中断程序实例:秒表 #include ; typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long uint32; code uint8 number[] = {0xc0,0xf9,0xa4,0xb0, //code 为写入flash 中 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xa7,0xa1,0x86,0x8e}; uint8 a[6]; //前无code,为写入ram uint16 counter = 0; sbit ENLED = P1^4; sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; void timer1_init() //定时器函数 { TMOD |= 0x10; //选择定时器模式 TMOD = 0xdf; TH1 TL1 TR1 } = 0xFC; //定时间初始值 = 0x67; = 1; //开始计时 void int_init() //中断函数 { ET1 = 1; //选择中断 1 EA = 1; //开启中断功能 } void refresh_led() //刷新函数 { static uint8 j = 0; //静态变量,第一次定义有效,整个函数均保留 switch(j) { case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;j++;P0 = number[a[0]];break; case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;j++;P0 = number[a[1]];break; case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;j++;P0 = number[a[2]];break; case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;j++;P0 = number[a[3]];break; case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;j++;P0 = number[a[4]];break; case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;j = 0;P0 = number[a[5]];break; default: break; } } main() //主函数 { ENLED = 0; ADDR3 = 1; //设置三八译码器的状态 timer1_init(

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体 阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档