第1章 C51程序设计基础
- 格式:ppt
- 大小:155.00 KB
- 文档页数:6
MCS-51单片机--C51基础陈茜茹Email:vickychenqian@ Email:vickychenqian@163com¾C51与标准C¾C51的数据类型和运算量¾C51的运算符¾程序结构¾函数¾其它数据类型•C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言了多种高级语言的特点并具备汇编语言的功能针对的语言日趋成熟成为的功能。
针对8051C语言日趋成熟,成为了专业化的实用高级语言。
很多硬件开发都用C语言编程,如:各种单片机、DSP、ARM等。
(1)C51中定义的库函数和标准C语言定义的库函数不同。
标准的C语言定义的库函数是按通用微型计算机来定义的,而C51中的库函数是按MCS-51单片机相应情况来定义的;(2)C51中的数据类型与标准C的数据类型也有一定的区别,在C51中还增加了几种针对MCS51单片机特有的数据类型;MCS-51(3)C51变量的存储模式与标准C中变量的存储模式不一样,C51中变量的存储模式是与MCS-51单片机的存储器紧密相关;MCS51)与标准的输入输出处理不一样,中的输入输出是(4C51C C51通过MCS-51串行口来完成的,输入输出指令执行前必须要对串行口进行初始化;(5)C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。
基本数据类型类型符号关键字数的表示范围所占位数(signed)int 3276832767有(signed) int 16-32768~32767(signed) short 16-32768~32767(i d)l 3221474836482147483647整型(signed) long -2147483648~214748364716unsigned int 0~65535065535无320~4294967295unsigned long int unsigned short int 160~65535fl t 34383438实型有float 32 3.4e-38~3.4e38有double 64 1.7e-308~1.7e308h128127字符型有char 8-128~127无unsigned char80~255¾长度根据其所指向的变量有所变化,1~3字节¾存放的是另外一个数据的地址g¾定义方法:unsigned int *da;sfr:特殊功能寄存器定义sfr16:sfr的16位数据定义sbit:可位寻址字节或sfr中位的定义bit:位变量定义例:sfr SCON = 0X98;sfr16 T2 = 0xCC;sbit OV = PSW^2;sbit OV=PSW^2;定义变量例:数据类型变量名unsigned int var1; unsigned intbit flags;unsigned char vector[10];用typedef或#define定义数据类型别名例1:typedef unsigned int uint;typedef unsigned int uint;uint var;uint var;例2:#define uchar unsigned char;uchar temp;说明变量所处单片机的存储区域名存储空间位置长度数据范围data直接寻址片内RAM低128B8位0~255 data 直接寻址片内RAM低128B 8位0~255bdata 可位寻址片内RAM(20-2FH) 1位0/1idata 间接寻址片全部内RAM 8位0~255pdata片外RAM低256B8位pdata 片外RAM低256B 8位0~255xdata片外RAM全部64K16位0~65535 xdata 片外RAM全部64K 16位code 程序ROM64K 16位0~65535定义变量例:数据类型[存储类型]变量名unsigned int data var1; unsigned intbit bdata flags;unsigned char code vector[10];不同的存储模式对变量默认的存储器类型不一样1.SMALL模式:小编译模式。
《单片机原理及应用(二)》模块一C51程序设计基础任务1:实例导航第二章C与80512.1 8051的编程语言1、8051的编程语言(四种):(1)BASIC语言(2)PL/M√(3)汇编语言√(4)C语言目前,汇编语言和C语言是广泛使用的两种单片机编程语言。
在未来的一段时间内,汇编语言和C语言还将同时存在,但从发展趋势看,C语言有逐渐取代汇编语言的可能。
最好的单片机编程者应是具有汇编语言基础,又精通C语言的。
2、C语言的优点(与汇编语言相比):(P41)(1)对单片机的指令系统不要求了解,仅要求对8051的存储器结构有所了解(2)寄存器的分配、不同存储器的寻址及数据类型等细节由编译器管理(3)程序有规范的结构,由不同的函数组成,这种方式可使程序结构化(4)编程及程序调试时间显著缩短,从而提高效率(5)提供库函数,具有较强的数据处理能力3、8051单片机C语言(单片机C51语言)了解一下单片机的种类:(查资料)2.2 Cx51编译器编译:C语言源程序转换成机器语言目标程序的过程,叫做编译。
编译器:能自动完成编译过程的一种计算机软件。
(1)C语言编译器(标准C)(2)C51编译器(经典8051单片机)(3)C x51编译器(经典8051单片机及派生产品)Cx51编译器完全遵照ANSI C语言标准,支持C语言的所有标准特征。
另外,还增加了可以直接支持8051结构的特征。
典型产品:KILE套装工具软件----------uVision2 集成开发环境的使用(P 302)例2-1:用uVision2软件编译调试一个C51程序(HELLO.C)基本步骤:(1)创建一个新项目(建在一个新文件夹下)并为项目选择一个CPU(此时会自动加入启动文件)(2)创建新程序文件(或打开旧程序文件)此例中,打开c:\kile\c51\examples\hello(3)将源文件添加到项目中此时还可修改工具选项(4)编译和链接项目(Build Target命令):翻译和链接源文件,并生成一个可以载入到uvision2调试器进行调试的绝对目标模块。
单片机技术及C51程序设计教学设计一、前言单片机技术是现代电子技术领域的重要分支,广泛应用于各种电子设备和系统中。
本文旨在介绍单片机技术相关知识,并以C51为例探讨如何进行C51程序设计教学设计。
二、单片机技术概述单片机技术是指将CPU、ROM、RAM、I/O口和各种外设集成在一块芯片内,形成一种具有特定功能的微型计算机系统。
单片机技术的主要特点包括:1.模块化结构:各个功能模块紧密集成,简化了系统结构设计,提高了系统可靠性和稳定性。
2.体积小、功耗低:单片机本身结构简化,芯片体积小,功耗低,适用于电池供电系统。
3.可编程:单片机的芯片内集成了程序存储器(ROM)、数据存储器(RAM)和计时器等,可以通过程序的编程完成各种功能应用。
4.价格低廉:随着技术的进步和生产规模的扩大,单片机价格不断下降,已经成为现代电子产品的必备芯片之一。
单片机应用领域非常广泛,比如工控系统、医疗设备、家用电器、汽车电子、玩具等。
由于单片机技术比较复杂,因此需要深入学习。
三、基于C51的程序设计教学设计C51是一种基于8位单片机的嵌入式系统开发语言,它是一种高级汇编语言,提高了程序设计效率和可读性,支持结构化程序设计,适合于掌握控制流程和程序结构的初学者。
下面是基于C51的程序设计教学设计:1.设计目标本教学设计旨在帮助学生掌握C51程序设计语言,了解单片机内部结构和工作原理,从而熟悉单片机应用开发过程,提高实践能力和创新思维能力。
2.教学内容本教学设计的基本内容包括:1.单片机基础知识:单片机工作原理、单片机体系结构、单片机芯片类型、单片机系统开发环境和开发工具等。
2.C51程序设计语言:C51汇编语言的基本语法、关键字、标识符、数据类型和变量定义等。
3.C51程序设计实践:C51程序设计实例,包括流程控制、IO口控制、定时器控制、串口通信和EEPROM存储等。
3.教学方法本教学设计采用“理论讲解+实验实践”的教学方法,同时注重发挥学生的主观能动性,在理论讲解的同时引导学生亲自完成实验操作和程序设计。
3.2 单片机的C51程序设计3.2.1 C51基础知识C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。
用C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进、扩充和移植。
而针对8051的C语言日趋成熟,成为了专业化的实用高级语言。
一、C51的特点C语言作为一种非常方便的语言而得到广泛的支持,很多硬件开发都用C语言编程,如:各种单片机、DSP、ARM等。
C语言程序本身不依赖于机器硬件系统,基本上不作修改或仅做简单修改就可将程序从不同的单片机中移植过来直接使用。
C语言提供了很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加程序可读性和可维护性。
二. 单片机的C51与汇编ASM—51相比,有如下优点:(1)对单片机的指令系统不要求了解,仅要求对8051的存储器结构有初步了解;(2)寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理;(3)程序有规范的结构,可分成不同的函数,这种方式可使程序结构化;(4)提供的库包含许多标准子程序,具有较强的数据处理能力;(5)由于具有方便的模块化编程技术,使已编好程序容易移植;3.2.2 C51的基本数据类型当给单片机编程时,单片机也要运算,而在单片机的运算中,这个“变量”数据的大小是有限制的,不能随意给一个变量赋任意的值,因为变量在单片机的内存中是要占据空间的,变量大小不同,所占据的空间就不同。
所以在设定一个变量之前,必须要给编译器声明这个变量的类型,以便让编译3.2.3 C51的基本运算C语言的运算符分以下几种:1、算术运算符顾名思义,算术运算符就是执行算术运算的操作符号。
除了一般人所熟悉的程序范例:main(){int A,B,C,D,E,x,y;x=8;y=3;A=x+y;B=x-y;C=x*y;D=x/y;E=x%y;}程序结果A=11、B=5、C=24、D=2、E=22、关系运算符程序范例:main(){Int A,B,C,D,E,F,x,y;x=9;y=4;A=(x==y);B=(x!=y);C=(x>y);D=(x<y);E=(x>=y);F=(x<=y);}程序结果:A=0、B=1、C=1、D=0、E=1、F=0 3、逻辑运算符程序范例:main(){int A,B,C,x,y,z;x=9;y=8;z=10;A=(x>y)&&(y<z);B=(x==y)||(y<=z);C=!(x>z);}程序结果:A=0、B=1、C=14、位运算符位运算符与逻辑运算符非常相似,它们之间的差异在于位运算符针对变量中的每一位,逻辑运算符则程序范例:main(){char A,B,C,D,E,F,x,y;x=0x25;/*即0010 0101*/y=0x62; /*即0110 0010*/A=x&y;B=x|y;C=x^y;D=x~E=x<<3;F=x>>2}程序结果:0010 0101x: 0010 0101 x: 0010 0101 x: 0010 0101 x:~y: &0110 0010 y: |0110 0010 y: ^0110 0010 1101 1010 0010 0000 0110 0111 0100 0111即A=0x20 即B=0x67 即C=0x47 即D=0xda将x的值左移三位的结果为:0 0 1 0 0 1 0 10 0 1 0 0 1 0 1 0 0 0移出的三位“001”丢失,后面三位用0填充,因此运算后的结果是00101000B,即E=0x28。
c51程序课程设计一、课程目标知识目标:1. 掌握C51编程语言的基本语法和结构;2. 理解并掌握C51的寄存器、内存管理及位操作等特性;3. 学会使用C51编写简单的嵌入式程序,实现基础功能;4. 了解C51程序与硬件之间的交互及接口技术。
技能目标:1. 能够运用C51编程语言设计简单的嵌入式系统程序;2. 培养学生分析问题、解决问题的能力,能够针对实际问题进行程序设计和调试;3. 学会使用C51的开发工具和调试方法,提高实际操作能力。
情感态度价值观目标:1. 培养学生对嵌入式系统开发的兴趣,激发创新意识;2. 培养学生严谨、细致的编程习惯,增强团队协作意识;3. 引导学生认识到编程对于国家科技发展的重要性,树立社会责任感。
本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合。
课程目标旨在使学生掌握C51程序设计的基本知识和技能,培养学生解决实际问题的能力,同时提高学生的情感态度价值观,为我国嵌入式领域培养优秀人才。
通过对课程目标的分解,教师可进行针对性的教学设计和评估,确保学生达到预期学习成果。
二、教学内容1. C51编程语言基础:- 数据类型、变量、常量- 运算符、表达式和语句- 控制结构(顺序、选择、循环)- 函数的定义和调用2. C51特殊功能及寄存器:- SFR寄存器及其操作- 位操作及位带操作- 中断处理与定时器3. C51内存管理:- 内部RAM和外部RAM的使用- 程序存储器操作- 数据存储器操作4. C51程序设计与实践:- 简单I/O口编程- 系统时钟与串行通信- ADC和DAC编程- 综合项目设计实例5. 课程实践与调试:- 使用开发工具(如Keil uVision)- 程序编译、下载和调试- 常见错误分析和解决方法教学内容按照教学大纲安排,结合教材相关章节,循序渐进地展开。
确保学生在掌握基础知识的同时,能够逐步深入到实际应用。
通过理论与实践相结合的教学内容,使学生在完成本课程学习后,具备基本的C51程序设计能力。
单片机原理与C51语言程序设计与基础教程课后习题答案习题填空题1.一般而言,微型计算机包括、、、四个基本组成部分。
2.单片机是一块芯片上的微型计算机。
以为核心的硬件电路称为单片机系统,它属于地应用范畴。
3.Atmel 公司生产的CMOS型51系列单片机,具有内核,用代替ROM作为程序存储器,4.单片机根据工作温度可分为、和三种。
民用级的温度范围是0℃一70℃,工业级是-40℃~85℃,军用级是-55℃-125℃(不同厂家的划分标推可能不同。
5.在单片机领域内,ICE的含义是。
选择题1.单片机的工作电压一般为V?A 5VB 3VC 1VD 4V2.单片机作为微机的一种,它具有如下特点:A 具有优异的性能价格比B 集成度高、体积小、可靠性高C 控制功能强,开发应用方便D 低电压、低功耗。
3.民用级单片机的温度范围是:A -40℃~85℃B 0℃一70℃C -55℃-125℃D 0℃一50℃4.MCS-51系列单片机最多有个中端源。
A 3B 4C 5D 65.下列简写名称中不是单片机或单片机系统的是A MCUB SCMC ICED CPU问答题1.单片机常用的应用领域有哪些?2.我们如何学习单片机这么技术?3.单片机从用途上可分成哪几类?分别由什么用处?答案填空题1.运算器、控制器、存储器、输入输出接口2.单片机嵌入式系统3.MCS-51 Flash ROM4.民用级(商业级) 工业级军用级5.在线仿真器选择题1.A2.ABCD3.B4.C5.D问答题1.单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:(1)在智能仪器仪表上的应用单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
爆闪灯C5 1 程序爆闪灯一,电子1,灯闪模式,灯闪模式可调,4个输出端口蓝—红一蓝一红1 2 3 4a, 四路轮流闪烁,频率可调,每路间隔可调,可一路闪,两路闪,三路闪,四路闪可调节例如(12—34—1234)b, 四路变换工作,每路间隔可调,例如(1—2—3—4黄闪灯模式)c, 四路组合变换闪烁,每路间隔可调,例如(1 —2—3—4—12—34—1234)2,输出,电池板,蓄电池,开关的端口采用接线槽(路灯控制器那种接线端子)3,LED—种颜色的数量在45—60PCS之间,电流控制在150mA-600mA 4,电池板在15W 10W 6W5,电池在20Ah,14Ah,8Ah二,结构1,开一套LED反光杯,以提高亮度,2,电池板的方向可灵活调动3, 电池需固定好,不能左右,上下晃动4, 灯板和透明罩可采用插槽式的,以便好组装5, 控制器可以固定在灯壳里面,不能有漏水到上面6, 外壳设计成插槽拼接的,减少螺丝的使用率#in elude <reg51.h>#i nclude vintrin s.h>typedef un sig ned char uchar;typedef un sig ned int uint;sbit P1_0=P1A0;sbit P1_仁 P1A1;sbit P1_4=P1A4;sbit P1_5=P1A5;sbit P1_6=P1A6;sbit P1_7=PM7;sfr P0M0=0X94;sfr P0M仁 0X93;sfr P2M0=0X96;sfr P2M仁 0X95;sfr P1M0=0X92;sfr P1M 1=0X91;sfr IAP_DATA=0XC2;sfr IAP_ADDRH=0XC3;sfr IAP_ADDRL=0XC4;sfr IAP_CMD=0xc5;sfr IAP_TRIG=0XC6;sfr IAP_CONTR=0XC7;un sig ned char lia ng_temp=1;un sig ned char an _temp=1;un sig ned char R_to_B_temp=1;un sig ned char stop_temp=1;un sig ned char mode=1;un sig ned char time_key=0;un sig ned char time_temp=0;un sig ned char mode1_temp=0;uchar ajs,ljs;uchar rtobjs,stopjs,js3c=1;uchar rba=0;bit la=1;ksj=0;void delay20(void) // 误差-0.000000000002usun sig ned char codezhifu0[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x 7C,0x39,0x5E,0x79,0x71};un sig ned char codezhifu2[16]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0XFe,0Xf6,0Xee,0X 3e,0X9c,0X7a,0X9e,0X8e};〃********************************************************* {un sig ned char a,b,c; for(c=2;c>0;c--) for(b=95;b>0;b--) for(a=209;a>0;a--); }〃*********************************************************void delay500(void) // 误差0us 500ms{un sig ned char a,b,c;for(c=23;c>0;c--)for(b=152;b>0;b--)for(a=70;a>0;a--);}〃*********************************************************void eeprom_erase( un sig ned char a){ _un sig ned int add=512;un sig ned int add1=0;add1=add*a;IAP_ADDRH=add1/255;IAP_ADDRL=add1%255;IAP_CONTR=0X8C;IAP_CMD=0X03;IAP_TRIG=0X5A;IAP_TRIG=0XA5;_nop_();〃*********************************************************void eeprom_writer( un sig ned int add, un sig ned char date) { _IAP_DATA=date;IAP_ADDRH=add/255;IAP_ADDRL=add%255;IAP_CONTR=OX8C;IAP_CMD=2;IAP_TRIG=0X5A;IAP_TRIG=0XA5;_nop_();_nop_();_nop_();}//*********************************************************** un sig ned char eeprom_read( un sig ned int add) {un sig ned char date=0;IAP_ADDRH=add/255;IAP_ADDRL=add%255;IAP_CONTR=0X8C;//IAP_CMD=0X01;IAP_TRIG=0X5A;IAP_TRIG=0XA5;_nop_();_nop_();_nop_();date=IAP_DATA; return(date);}//********************************************************* void show( un sig ned char a){un sig ned char shi;un sig ned char ge;un sig ned char *p;un sig ned char *p1;p=zhifu0;p仁 zhifu2;shi=a/10;shi=*(p+shi);// 得到编码值ge=a%10;ge=*(p1+ge);P0=shi;P2=ge;}〃********************************************************** void lia ng_key(){ _if(!P1_0){delay20();if(!P1_0){lia ng_temp++;if(lia ng_temp>99){lia ng_temp=1;} show(lia ng_temp); while(!P1_0){while(ksj){lia ng_temp++;delay20();if(lia ng_temp>99)lia ng_temp=1;show(lia ng_temp);}_ }}delay20();}}〃***********************************************************void an_ key(){ _if(P1_0==0){delay20();if(P1_0==0){an _temp++;if(an_temp>99){an _temp=1;}show(a n_temp);while(!P1_0){while(ksj){a n_temp++;delay20();if(a n_temp>99)a n_temp=1;show(a n_temp);}}}delay20();}}〃***********************************************************void R_to_B_key(){if(P1_0==0){delay20();if(P1_O==O){R_to_B_temp++;if(R_to_B_temp>99){R_to_B_temp=1;}show(R_to_B_temp);while(!P1_0){while(ksj){R_to_B_temp++;delay20();if(R_to_B_temp>99)R_to_B_temp=1;sh ow(R_to_B_temp);}}}delay20();}}〃***********************************************************void stop_key(){ _if(P1_0==0){delay20();if(P1_0==0){stop_temp++;if(stop_temp>99){stop_temp=1;} show(stop_temp);while(!P1_0){while(ksj){stop_temp++;delay20();if(stop_temp>99)stop_temp=1;show(stoP_temp);}}}delay20();}}〃************************************************************void show_mode( un sig ned char a){ _un sig ned char ge=0;un sig ned char *p1;p仁 zhifu2;ge=*(p1+a);// P0=0x00;P2=ge;}〃************************************************************ void set_mode(){ _if(!P1_0){delay20();TR1=1;〃开定时器if(!P1_0){show_mode(mode);} _while(time_key==0){ _if(!P1_0){delay20();if(!P1_0){mode++;if(mode>5){mode=1;time_temp=0;} _4个步骤第show_mode(mode); delay20();}}TR1=0;〃 关定时器time_key=0;time_temp=0;TH1 = 0x3C;TL1 = 0xB0;eeprom_erase(1);eeprom_writer(0,mode);P0=0;P2=0;rtobjs= R_to_B_temp;stopjs=stop_temp;ajs=a n_temp;ljs=lia ng_temp;rba=0;}}〃*********************************************************** void set_fu n()〃 设置时间的顺序是从亮,暗,红到蓝,停, 个模式{un sig ned char pan dua n=0;if(!P1_1){delay20();if(!P1_1){P0=zhifu0[15];P2=zhifu2[1];delay500();delay500();panduan=1;while(pa ndua n){lia ng_key();show(lia ng_temp);if(!P1_1){delay20();panduan=0;ljs=lia ng_temp; delay20();}}panduan=1;P0=zhifu0[15];P2=zhifu2[2];delay500();delay500();while(pa ndua n){an_key();show(a n_temp);if(!P1_1){delay20();panduan=0; ajs=a n_temp;delay20();}}panduan=1;P0=zhifu0[15];P2=zhifu2[3]; delay500(); delay500();while(pa ndua n){ R_to_B_key();show(R_to_B_temp);if(!P1_1){delay20();panduan=0; rtobjs=R_to_B_temp;delay20();}panduan=1;P0=zhifu0[15];P2=zhifu2[4]; delay500(); delay500();while(pa ndua n){stop_key(); show(stop_temp); if(!P1_1) { delay20();panduan=0; stopjs=stop_temp; delay20();}}eeprom_erase(0);eeprom_writer(0,lia ng_temp); eeprom_writer(1,a n_temp);eeprom_writer(2,R_to_B_temp); eeprom_writer(3,stop_temp);P0=0X0;P2=0X0;// red=1;// blue=0;// yq=yq2=0;rtobjs = R_to_B_temp;stopjs = stop_temp;ajs = an _temp;ljs = lia ng_temp;rba=0;}}}〃***********************************************************void mode_out(bit a1,bit a2,bit a3,bit a4)//a 为停留时间,各位为输出值{P1_4=a1;P1_5=a2;P1_6=a3;P1_7=a4;}void redf un(v oid){if(js3c<4){if(la) mode_out(1,0,1,0);else mode_out(0,0,0,0);} _else{mode_out(0,0,0,0);} _}void bluef un(v oid)if(js3c<4){if(la) mode_out(0,1,0,1);else mode_out(0,0,0,0);} _else mode_out(0,0,0,0);} _void allf un(v oid){if(js3c<4){if(la) mode_out(1,1,1,1);else mode_out(0,0,0,0);}else mode_out(0,0,0,0);} _〃***********************************************************void mode1()〃模式1{〃un sig ned char a=0;switch(rba){case 0: redf un() ;break;case 1: bluef un() ;break; case 2: allf un( );break; default:break;}}void mode_work( un sig ned char a)// 参数为模式{ switch(a){case 1: mode1(); break; // 第一种模式case 2: mode1(); break; case 3: mode1(); break; case 4: mode1(); break; case 5: mode1(); break; }}/*void decipherme nt_dog()〃解密完后才能使用本控制器if((P1_O==O)&(P1_1==0)){}} */〃***********************************************************void Ini tTimerl(void){TMOD = 0x11;TH1 = 0x3C;TL1 = OxBO;EA = 1;ET1 = 1;}〃***********************************************************void In itTimerO(void){THO = Oxf2;TLO = Oxfb;ET0 = 1;TRO = 1;}〃***********************************************************mai n(){Ini tTimer1();Ini tTimerO();P0M0=0XFF;〃配成强上拉POM仁0X00;P2M0=0XFF;P2M仁0X00;P1M 仁0X00;P1M0=0XF0;P0=0;P2=0;P1_4=0;P1_5=0;P1_6=0;P1_7=0;lia ng_temp=eeprom_read(0); an _temp=eeprom_read(1);R_to_B_temp=eeprom_read(2); stop_temp=eeprom_read(3); rtobjs= R_to_B_temp; stopjs=stop_temp;ajs=a n_temp; ljs=lia ng_temp;while(1){set_fu n();set_mode(); mode_work(mode);} _}〃********************************************************** void Timer1Interrupt(void) interrupt 3 {TH1 = 0x7d;TL1 = Oxcb;time_temp++;if(time_temp>30){ _time_key=1;} _}〃************************************************************ void TimerOI nterrupt(void) in terrupt 1{// TR0=0;static uchar i=0;static uchar kj=0;TH0 = 0xf2;TL0 = 0xfb;if(js3c<4){if(la) // {Ijs--;if(ljs==0){la=0;ajs=a n_temp;}}else{ajs--;if(ajs==0){la=1;ljs=lia ng_temp;js3c++;}〃10 ms如果在亮计时// 亮计数自减// 亮的时间到// 置0亮暗计数// 还原暗计数值// 如果在暗计时// 晚计数自减// 保持暗的时间到// 点亮// 还原亮计数初值//else P1&=OxOf;if(rba==O && js3c>=3){i++;if(i>5){i=0;rtobjs--; // 红到蓝时间自减}if(rtobjs==0) // 时间到进入到蓝亮{js3c=1;rba=1;rtobjs=R_to_B_temp;}}if(rba==1 && js3c>=3){i++;if(i>5){i=0;rtobjs--;} //if(rtobjs==0){js3c=1;rba=2;stopjs=stop_temp; } _}// 红到蓝时间自减红到蓝时间自减//时间到进入到蓝亮if(rba==2 && js3c>=3){ i++;if(i>5){i=0;stopjs--; // 红到蓝时间自减}//时间到进入到蓝亮if(stopjs==0){ js3c=1;rba=0; rtobjs=R_to_B_temp;}}if(!P1_0) 〃ksj 为长按标记。
单片机答案第1章单片机概述思考题及习题1 参考答案一、填空1. 除了单片机这一名称之外,单片机还可称为()或()。
答:微控制器,嵌入式控制器.2.单片机与普通微型计算机的不同之处在于其将()、()和()三部分,通过内部()连接在一起,集成于一块芯片上。
答:CPU、存储器、I/O口、总线3. AT89S51单片机工作频率上限为()MHz。
答:24MHz。
4. 专用单片机已使系统结构最简化、软硬件资源利用最优化,从而大大降低()和提高()。
答:成本,可靠性。
二、单选1. 单片机内部数据之所以用二进制形式表示,主要是A.为了编程方便 B.受器件的物理性能限制C.为了通用性 D.为了提高运算数度答:B2. 在家用电器中使用单片机应属于微计算机的。
A.辅助设计应用 B.测量、控制应用C.数值计算应用 D.数据处理应用答: B3. 下面的哪一项应用,不属于单片机的应用范围。
A.工业控制 B.家用电器的控制 C.数据库管理 D.汽车电子设备答:C三、判断对错1. STC系列单片机是8051内核的单片机。
对2. AT89S52与AT89S51相比,片内多出了4KB的Flash程序存储器、128B的RAM、1个中断源、1个定时器(且具有捕捉功能)。
对3. 单片机是一种CPU。
错4. AT89S52单片机是微处理器。
错5. AT89S51片内的Flash程序存储器可在线写入(ISP),而AT89C52则不能。
对6. 为AT89C51单片机设计的应用系统板,可将芯片AT89C51直接用芯片AT89S51替换。
对7. 为AT89S51单片机设计的应用系统板,可将芯片AT89S51直接用芯片AT89S52替换。
对8. 单片机的功能侧重于测量和控制,而复杂的数字信号处理运算及高速的测控功能则是DSP的长处。
对第2章 AT89S51单片机片内硬件结构思考题及习题2 参考答案一、填空1. 在AT89S51单片机中,如果采用6MHz晶振,一个机器周期为()。
C51程序设计语言C语言是一种中级编程语言,常用于系统程序设计和应用程序编写。
C语言具有高效的执行速度、丰富的数据类型和强大的功能,是开发底层系统软件和性能敏感的应用程序的首选语言之一C语言的历史可以追溯到20世纪70年代,由贝尔实验室的Dennis Ritchie开发。
最初用于Unix操作系统的开发,后来逐渐流行起来并影响了整个计算机领域。
C语言的设计目标是提供一种简单、高效、可移植的编程语言,以便开发者能够更方便地编写系统级的软件。
C语言的语法与许多后来的编程语言相似,因此学会C语言可以为学习其他编程语言打下坚实的基础。
C语言的特点包括以下几个方面:1.高效的执行速度:C语言是一种编译型语言,其源代码会被编译为机器码,执行速度较快。
这使得C语言非常适合开发对性能要求较高的应用程序。
2.丰富的数据类型:C语言提供了丰富的数据类型,包括整型、浮点型、字符型、数组、结构体、指针等等。
这些数据类型可以满足编程中各种不同的需要。
3.强大的指针操作:C语言具有强大的指针操作能力,允许程序员直接操作内存地址。
指针在C语言中是一项非常重要的概念,它可以用于动态分配内存、访问数组元素、实现数据结构等。
4.低级的控制:C语言提供了低级的控制结构,如条件语句、循环语句和跳转语句。
这使得程序员可以更精确地控制程序的执行流程,提高程序的灵活性和效率。
5.可移植性:C语言具有很高的可移植性,可以在不同的计算机平台上编写并运行。
这是因为C语言的代码可以通过编译器将源代码转化为特定机器的机器码。
通过使用C语言,开发者可以编写各种不同类型的应用程序,如操作系统、嵌入式系统、网络应用程序、图形用户界面等。
C语言也成为了其他高级语言的基础,如C++、Java和Python等。
尽管C语言具有很多优点,但它也存在一些缺点。
首先,C语言的代码相对较长,编写起来比较繁琐。
其次,C语言的指针操作容易引发许多低级的错误,如内存泄漏、越界访问等。