




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机C语言程序设计基础,一 单片机C程序设计的一般格式 二 单片机C程序的数据类型 三 单片机C程序的运算符和表达式 四 单片机C程序的一般语法结构 五 51系列单片C语言特点,一 单片机C程序设计的一般格式,1、几个基本概念 (1)函数:C语言程序由一个主函数和若干个其它函数构成,程序中由主函数调用其它函数,其它函数之间也可以相互调用。 (2)指针与指针变量:若定义变量x,&x即为x的指针,指针变量是指针的指针,若xp=&x,利用 *xp即可访问变量x。 (3)#include(包含处理命令):把一个源文件将另外一个源文件的全部内容包含进来,或者说把一个外部文件包含到本文件之中。 (4)#define(宏定义):在C程序中,可以指定一标志符去定义一个常量或字符串。,2、单片机C程序的基本结构 (1)主函数名必须为main( )。C程序通过函数调用去执行指定的工作。 (2)一个函数由说明部分和函数体两部分组成。函数说明部分是对函数名、函数类型、形参名和形参类型等所做的说明。 (3)C程序的执行总是从main( )函数开始,而对该函数的位置无特殊规定。 (4)在源程序文件需要包含其它源程序文件时,应在本程序文件头部用包含命令#include处理。 (5)C程序中的一个函数需要调用另一个子函数时,另一个函数应写在前面,否则应声明。 (6)C程序书写格式自由,一行可写一个语句或几个语句。每个语句结尾用;结束。,二 单片机C程序的数据类型,1、常量和符号常量 例:#define PARL 3.14159 (PARL即为符号常量) (1)整型常量,如11,o11,0xff等。 (2)实型常量,如0.12,1.55e5等。 (3)字符常量,如a、A等。 (4)字符串常量,如“a”、“CHINA”等。 2、变量 (1) 位变量:bit和sbit (2)字符变量:singed char和unsigned char (3)整型变量:singed int和unsigned int (4)长整型变量:unsigned long和signed long,(3) 实型变量:float和double (4) 寄存器变量:sfr和sfr16,三 单片机C程序的运算符和表达式,(1)算术运算符13个:+、-、*、/、%、=、+=、-=、*=、/=、%=、+、- (2)关系运算符6个:、=、|、&(相与)、&(变量取地址) (5)指针运算符:*,四 单片机C程序的一般语法结构,1、顺序结构 例:main( ) P0=0xff; P2=0x30; P1=0xff; P3=0xff; scan( ); test ( ); ,2、分支结构 (1)单分支结构形式:if(条件表达式)执行语句; 例:,(2)双分支结构: 形式:if(条件表达式)语句1; else 语句2; 例:,(3)由双分支结构变化而成的多分支结构形式: if(表达式1)语句1; else if(表达式2) 语句2; . . else if(表达式n) 语句n; else 语句n+1;,例:,(4) switchcase多分支转移结构语句形式: switch(条件表达式) case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; . . . case 常量表达式n:语句n;break; default:语句n+1;break; ,例:,3、循环结构 (1)while(表达式)循环体语句; 例:void delay(unsigned char times) unsigned char I; i=250; while(-times)while(-i); ,(2)do循环体语句; while(表达式); (3)for(表达式1;表达式2;表达式3)循环体语句; 例:,五 51系列单片C语言特点,(1)使用文件包含命令#include应注意对应头文件的名称,要与规定名称相符。 (2)单片机中,一个变量可放在片内存储单元,也可放在片外存储单元,放在片内存储单元还要区分是否可位寻址,或放在间接寻址区。 例:int data x,y; /表示整型变量指定在 片内数据存储区 char xdata m,n; /表示字符变量指定在片外数据存储区,C51存储类型,(3)21个SFR只能直接寻址,一般在头文件中用字节定义方式定义。 如:sfr TMOD=0x89; (4)C51编译器编译源程序时,数据类型和存储类型都可预先定义,但数据具体放在哪一个单元不由用户指定。 (5)单片机C程序的中断程序与汇编语言程序不同,中断过程通过使用interrupt关键字和中断号(031)来实现。中断号告诉编译器中断程序的入口地址。,单片机中断源与C中断程序中中断号对照表,一个定时器0中断程序编写格式如下:,Void timer0(void) interrupt 1 TR0=0; TH0=0xff; TL0=0x30; TR0=0; tick_count+; ,用户不必关心现场保护及恢复现场的问题,编译器会自动完成。 中断程序的入口地址被编译器放在中断向量中,无需用户指定。,(6)片外扩展的I/O接口,可用#define进行定义。 如: #include “absacc.h“ #define ADC0804 XBYTE0x7ffe,照此电路连接,ADC0804作为单片机扩展的IO设备,采用了端口控制方式(即端口作通用I/O口用)。,若用总线控制方式,如何修改电路和程序?,unsigned char adc0804( void ) /读AD0804 子程序 unsigned char addata,i; rd=1;wr=1;int1=1; /读ADC0804 前准备 P1=0xff; /P1 全部置一准备 cs=0;wr=0;wr=1; /启动ADC0804 开始测电压 while(int1=1); /查询AD转换结束标志 rd=0; /开始读转换后数据 i=i; i=i; /无意义语句,用于延时等待 addata=P1; /读出的数据赋与addata rd=1;cs=1; /读数完毕 return(addata); /返回最后读出的数据 ,例1:清零程序 (将2000H20FFH的内容清零) 汇编语言程序 ORG 0000H SE01: MOV R0,#00H MOV DPTR,#2000H ;(0000H)送DPTR LOO1: CLR A MOVX DPTR,A ;0送(DPTR) INC DPTR ;DPTR+1 INC R0 ;字节数加1 CJNE R0,#00H,LOO1 ;不到FF个字节再清 LOOP: SJMP LOOP,程序示例,清零程序 (将2000H20FFH的内容清零) C51程序 #include main( ) int i; unsigned char xdata *p=0x2000; /* 指针指向2000H单元 */ for(i=0;i256;i+) *p=0; p+; /*清零2000H-20FFH单元*/ , 汇编语言程序 ORG 0000H L00: MOV R0,#10H ;查找16个字节 MOV R1,#00H MOV DPTR,#2000H L11: MOVX A,DPTR CJNE A,#00H,L16 ;取出内容与00H相等吗? INC R1 ;取出个数加1 L16: INC DPTR DJNZ R0,L11 ;未完继续 MOV DPTR,#2100H MOV A,R1 MOVX DPTR,A ;相同数个数送2100H L1E: SJMP L1E,例2:查找零的个数(在2000H-200FH中查出有几个字节是零,把个数放在2100H单元中),查找零的个数 C51程序 #include main ( ) unsigned char xdata *p=0x2000;/*指针p指向2000H单元*/ int n=0,i; for(i=0;i16;i+) if(*p=0) n+; /* 若该单元内容为零,则n+1 */ p+; /* 指针指向下一单元 */ p=0x2100; /* 指针p指向2100H单元 */ *p=n; /* 把个数放在2100H单元中 */ ,结合单片机硬件的C程序示例,1、任务:点亮LED灯,在Keil软件编辑窗口输入以下程序: #include sbit P3_0=P30; void main(void) while(1) P3_0=0; ,2、任务:闪烁灯,#include void delay02s(void) unsigned char i,j,k; for(i=20;i0;i-) for(j=20;j0;j-) for(k=248;k0;k-); void main(void) while(1) P3_0=0; delay02s(); P3_0=1; delay02s(); ,要求:前面例子是让LED灯亮, 现在实现LED灯的闪烁。,3、任务:花样灯,要求:做广告灯的左移右移,要求8个灯依次点亮下移、再上移、从两边向中间移、从中间向两边移、1357和2468交替亮灭3次、1234和5678交替亮灭2次,1256和3478交替亮灭3次,最后构成循环。,参考程序: #include “reg51.h“ #define uchar unsigned char const uchar tab= 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, /下移 0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, /上移 0xef,0xbd,0xdb,0xfe, /两边向中间移 0xdb,0xbd,0xef, /中间向两边移 0xaa,0x55,0xaa,0x55,0xaa,0x55, /1357,2468交替3次 0xf0,0x0f,0xf0,0x0f, /1234,5678交替2次 0x33,0xcc,0x33,0xcc,0x33,0xcc, /1256,3478交替3次 0x00 ; /结束码 uchar t=0; /以下初始化子函数/ void sys_init(void) TMOD=0x01; TH0=0xd8;,续前页: TL0=0xef; E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年学历类自考专业(学前教育)学前教育行政与管理-幼儿园课程参考题库含答案解析(5套)
- 护理和谐氛围
- (2024年秋季版)江苏省连云港市岗埠中学七年级道德与法治上册 6.1 生活需要有情趣说课稿 苏教版
- (2025年标准)胸痛中心协议书
- 2025年学历类自考专业(学前教育)学前卫生学-幼儿园课程参考题库含答案解析(5套)
- 2025年学历类自考专业(学前教育)学前儿童语言教育-幼儿文学参考题库含答案解析(5套)
- 2025年房产抵账退回协议书
- (2025年标准)医院宣传保密协议书
- 2025年学历类自考专业(学前教育)学前儿童数学教育-学前儿童发展参考题库含答案解析(5套)
- (2025年标准)芯片质量技术协议书
- 社区模拟试题和答案
- 1-安全生产治本攻坚三年行动工作方案及台账模板(2024-2026年)
- 银行测试管理办法
- 2025年技师(二级)养老护理员职业技能鉴定《理论知识》真题卷(后附答案和解析)
- CQI审核管理办法
- 境外常驻人员管理办法
- 反恐怖宣传课件
- 教培机构开学季活动策划方案
- 2025至2030中国城市地下管线探测行业发展状况与投资策略分析报告
- 园区项目用电管理办法
- DBJ-T 13-91-2025 福建省房屋市政工程安全风险分级管控与隐患排查治理标准
评论
0/150
提交评论