《最新单片机课件15章幻灯片.ppt》由会员分享,可在线阅读,更多相关《最新单片机课件15章幻灯片.ppt(132页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、引言引言 单片机全称为单片微型计算机(Single-Chip Microcomputer),在一块芯片上,集成了CPU, RAM, ROM,定时器/计数器(C/T)和多种I/O。 一块芯片就是一台计算机(俗话说麻雀虽小,五脏俱全),它具有体积小、功能强、价格便宜等优点,被广泛应用在产品智能化和工业自动化上。单片机的编程规范化、网络化发展实时多任务操作系统(RTOS) Real-Time Operating System VxWorks, PSOS, QNX, WindowsCE, uC/OS, uClinux, RTLinux 现场总线技术(Field Bus) LonWorks Local
2、Network CAN Bus Control Area Network 嵌入式Internet第一章第一章 单片机基础知识单片机基础知识1.1 80511.1 8051单片机的特点单片机的特点 基本组成部件:中央处理器:CPU 8位数据存储器:RAM 128B程序存储器:ROM 4KB定时器/计数器:2个16位I/O接口: 8位4(P0P3)MCS-51 INTEL 1980年单片机标志: MCS-48, MCS-51, MCS-96(16位)8位机:8051系列 教学首选 8051 掩膜 8031 无ROM, EPROM, FLASH 8751 EPROM低功耗基本型: 80C51, 80
3、C31, 87C5180年代中期,专利互让的形式,51系列衍生产品Atmel 89C51,89C52,89C2051Philips 80C51,80C552,87C752MAXIM(Dallas) 80C390, 80C400 Infineon C517, C509, 80C537 ADI ADuC812, ADuC824 TI (BB) MSC1210SILABS(Cygnal) C8051FSTCmicro STC89C51Cypress,Winbond, SST AT89C51 AT89C52闪存 4KB 8KB内存 128B 256B工作频率 24MHz 24MHz输入/输出线 32
4、32定时/计数器 2 3中断源 5 8串行口 1 1AT89C2051(20引脚 ) AT89S51 1.2 8051的内部结构 1.2.1 1.2.1 中央处理器中央处理器CPUCPU一、一、ALUALU 算术运算:加,减,乘,除 逻辑运算:与,或,异或 位操作(布尔):与,或,取反 ACCA:累加器, B:寄存器 程序状态字:PSW 8位寄存器 CY: 进位标志。有进位/借位时置1AC:半进位标志。D3-D4进位/借位时置1OV:溢出标志。带符号数超出128127置1,乘法结果超过255,除数为0P: 奇偶标志。A中的1的个数为奇数F0:用户设置标志RS1,RS0: 通用寄存器选择位,在存
5、储器组织部分介绍二、时钟电路和基本时序周期 1. 8051时钟内部高增益放大器,引脚XTAL1和XTAL2时钟产生方式:1) 内部方式:外接石英晶体(晶振)2) 外部方式:外部振荡信号作8051时钟 2基本时序周期 振荡周期:1/fOSC 时钟周期:2/fOSC 机器周期:12/fOSC=T 指令周期:14T1.2.2 存储器组织 存储器特点 程序存储器 分开,哈佛型 数据存储器 合并,普林斯顿型物理上的4 个空间:1) 片内程序存储器 2) 片外程序存储器3) 片内数据存储器4) 片外数据存储器 程序存储器ROM型(只读):程序,表格常数 当PC超过4KB, 自动转1000HFFFFH(片外
6、) 数据存储器RAM型(读,写):数据暂存, 运算结果, 标志位, 堆栈 片内: 256B, MOV片外: 64KB, MOVX 片内部分2块: 007FH, 128B, RAM区 80HFFH, 128B, SFR区 (特殊功能寄存器) 低128B 通用寄存器区, 4组 ,R0R7 可位寻址区,20H2FH,16个 用户RAM1.通用寄存器区 4个组: 0区 00H07H 1区 08H0FH 2区 10H17H 3区 18H1FH 由PSW中的RS1,RS2来决定用哪个工作区(00,01,10,11)2. 可位寻址区 202FH, 16字节007FH, 128位 3. 用户RAM 30H7F
7、H 堆栈, 60H(向上增长) 复位后设置SP=07H 4. 特殊功能寄存器 21个SFR (Special Function Register) 80HFFH, 只能直接寻址 除PC和4组R0R7外,其他都是SFR, 可位寻址的SFR ,其地址可被8整除与通用微机不同的特点: 程序存储器和数据存储器严格分开 特殊功能寄存器和内部数据存储器统一编址1.2.3 片内并行接口 4部分:端口锁存器,输入缓冲器,输出驱动器,端口引脚准双向口没有专用地址总线: P2 高8位, A15A8; P0 低8位, A7A0;专用数据总线: P0, D7D0 P0口采用总线复用技术共性的部分输出驱动FET(场效应
8、管),受输出控制电路控制写操作时读操作时,“读修改写”指令例如: ORL P0,A端口引脚读操作:FET导通,钳位于0。作普通I/O口读入时应先向端口写1准双向口1.2.4 8051的内部资源 串行口、定时器/计数器、中断系统1.2.5 8051的芯片引脚引脚功能VCC:电源5VVSS:接地XTAL1和XTAL2:外接晶振引脚P0口:地址/数据总线P1口:准双向通用I/O口P3口:多用途端口ALE/PROG:地址锁存信号输出端。RST:复位引脚 SP= 07H P0P3= 0FFH PC= 0 SFR=0 复位后,从0000H开始执行程序EA/VPP:内部和外部程序存储器选择。 0:外,1:内
9、PSEN:片外程序存储器读选通,低电平有效1.2.6 单片机工作方式 一、低功耗操作方式 两种:节电(空闲)方式CPU停止,RAM、定时器、串行口和中断系统继续工作掉电方式仅给RAM供电,50A二、EPROM编程和校验三、单步执行方式 用于单片机开发工具或仿真器1.4 指令系统 1.4.1 寻址方式一、寄存器寻址MOV A, R0; A=(R0)ADD A,R0; A=(A)+(R0) 寻址空间:R0R7,A,B,C, DPTR, AB(乘除法) 二、直接寻址 1) MOV A, 4FH; A=(4FH) 二字节 2) MOV A, P0 寻址空间:内部 RAM低128字节, SFR 三、寄存
10、器间接寻址1)MOV A, R1 ; A=(R1) (R1)=40H, A=(40H)PUSH 30H; (SP)=(30H) 2)MOVX A, R0; A=(R0) ExternalMOV P2,#10H MOVX A, DPTR; A=(DPTR)寻址空间:内部RAM(R0, R1, SP); 外部RAM(R0, R1, DPTR) 四、立即寻址MOV A, #6FH ; A=6FH 二字节MOV DPTR, #1234H ; DPTR=1234H ; 三字节 寻址空间:程序存储器 五、变址寻址MOVC A, A+DPTR ; A=(DPTR)+(A) 单字节MOVC A, A+PC ;
11、 A=(PC)+(A) 变址寻址方式只适用于8051的程序存储器,用于读取数据表。六、相对寻址SJMP rel;PC=PC+2+rel 寻址空间:程序存储器 七、位寻址SETB bit; (bit)=1寻址空间:内部RAM可位寻址区; SFR 可位寻址位1.4.2 指令分类说明 共111条指令,分5大类:数据传送指令算术运算指令逻辑运算及移位指令转移指令十进制指令一、数据传送指令 传送指令不破坏源地址中的数据而只是把数据拷贝到目的地址,没有寄存器到寄存器的传送和间接/间接传送。 (一) 内部RAM间的数据传送 MOV(move)1.立即寻址 MOV A, #data MOV Rn, #data
12、 MOV Ri, #data MOV direct, #data MOV DPTR, #data例如:MOV A,#30HMOV R1,#20HMOV R1,#40HMOV 32H,#50HMOV DPTR,#1000H2.直接寻址 MOV A, direct MOV Rn, direct MOV Ri, direct MOV direct2, direct13. 间接寻址: MOV A, Ri MOV direct, Ri4.寄存器寻址: MOV A, Rn MOV Rn, A MOV Ri, A MOV direct, A MOV direct, Rn (二)涉外RAM传送 MOVX外RA
13、M(External) MOVC外ROM (Code) 1. 外RAM MOVX A, Ri MOVX Ri, A MOVX A, DPTR MOVX DPTR, A2. 外ROM MOVC A, A+DPTR ; 远程查表 MOVC A, A+PC ; 近程查表例: ADD A,#01HMOVC A,A+PC RETDB 30H ;0DB 31H ;1 DB 39H ;9(三)堆栈指令 PUSP direct POP direct (四)数据交换 XCH A,Rn XCH A,Ri XCH A, direct SWAP A(五)位传送 MOV C, bitMOV bit,C 二、算术运算 1
14、. 加法1) ADD A, Rn2) ADD A, direct3) ADD A, Ri4) ADD A, #data 影响标志:CY2. 带进位加法 (Add with Carry) ADDC A, Rn3. 带借位减法 (Substrct with Borrow) SUBB A, Rn 没有不带借位标志的减法指令4. 乘法 MUL AB 结果在累加器(低字节)和B寄存器(高字节)中。5. 除法 DIV AB; 结果在ACC中,余数(不是小数部分)在B中。6. 加1和减1 (Increment&Decrement) INC A DEC A INC R2 DEC R5 INC 45H DEC
15、3EH INC R0 DEC R1 INC DPTR三、逻辑运算 1. 逻辑与(Logical-AND)ANLA, Rn; A=ARnANL A, directANL A, RiANLA, #dataANL direct, AANLdirect, #dataANLC, bitANLC, /bit 2. 逻辑或(Logical-OR)ORLA, Rn 3. 逻辑异或(Logical Exclusive-OR)XRLA, Rn 4. 取反(Complement)CPLACPLCCPLbit5. 清除(Clear)CLRACLRCCLRbit 6. 置位(Set Bit)SETBCSETBbit7.
16、 移位(Rotate)RL A;Rotate LeftRR A;Rotate RightRLC A ;Rotate Left through the Carry flagRRC A ;Rotate Right through the Carry flag四、十进制指令 1. XCHD A, R0 交换累加器和间接地址的低四位,高四位保留原值。2. SWAP A 交换累加器的高四位和低四位。3. DA(Decimal-Adjust) DA A五、转移指令 1无条件转移没有测试条件的转移AJMP SUBROUTINE ;必须在同一2K块内; (Absolute Jump)LJMP POINTA ;
17、64K程序空间的任意位置; (Long Jump)SJMP WAITING ;相对转移127128 ; (Short Jump)JMP A+DPTR ;间接转移(Jump Indirect)2条件转移测试并完成短转移或继续下一条指令JZ POINTX; ZeroJNZ POINTY; Not ZeroJC POINTZ; Jump if CarryJNC POINTZ; Jump if Not CarryJB P3.5,POINTA; Jump if Bit is setJNB P3.1,POINTB; Jump if Not BitJBC 22.3,POINTC; if Bit is set
18、 and Clear bit 3CJNE (Compare and Jump if Not Equal)比较,不相等就转移CJNE A, 3EH,POINTZCJNE A, #10, POINTWCJNE R5, #34, LOOPCJNE R1, #5, GOINGON4DJNZ(Decrement and Jump if Not Zero)用于重复循环的指令,次数在循环外设置,循环减到零时退出。DJNZ R3, POINTQDJNZ 3FH,POINTJ5CALL(子程序调用)ACALL ROUTINE; Absolute Call LCALL DISPLAY; Long Call; PC
19、=PC+3 ;SP=SP+1;(SP)=PC70 ;SP=SP+1;(SP)=PC158 ;PC=ADDR166RET(Return)子程序返回RET;把堆栈上的两个字节的值放入程序计数器,在子程序完成后继续原程序流RETI;恢复中断逻辑,允许同一优先级的中断。7NOP(No Operation)没有实质性操作,用于延时。 1.4.3 伪指令 1ORG伪指令(Origin)指令出现在源程序或数据块的开始,指明语句后面的目标程序或数据块存放的起始地址。2DB伪指令(Define Byte) 将项表中的字节数据存放到从标号开始的连续字节单元中。3DW伪指令(Define Word) 功能与DB类似
20、,用于定义16位的地址表。4EQU(Equal) 用于给一个表达式的值或字符串起一个名字,之后的名字可以用做程序的地址、数据地址或立即数使用。5DATA伪指令(Data) 给一个8位内部RAM单元起一个名字,同一单元地址可以有多个名字。6XDATA伪指令(External Data) 给一个8位外部RAM单元起一个名字7BIT伪指令 给可位寻址的位单元起名字。8、END伪指令 指出源程序到此结束,一个源程序只在最后使用一个END 例:ORG 0100HMOVA,#23HADDA,#34HEND1.5 实用程序设计 一、256种分支转移程序JMP256功能:根据入口条件转移到256个目的地址。入
21、口: (R3)=转移目的地址的序号(00FFH)出口: (PC)=为转移子程序的入口地址。JMP256:JMP256:MOVMOV A A,R3R3;取地址;取地址MOVMOV DPTR DPTR,#TBL#TBL;装转移表基址;装转移表基址CLRCLR C CRLCRLC A A;变址;变址2 2JNCJNC LOW128 LOW128 ;是前;是前128128个子程序,则转移个子程序,则转移INCINC DPH DPH;否,基址加;否,基址加256256LOW128:LOW128:MOVMOV SAVE SAVE,A A;暂存变址;暂存变址MOVC AMOVC A,A+DPTRA+DPTR
22、PUSHPUSH ACC ACC;子程序首址低;子程序首址低8 8位进栈位进栈MOVMOV A, SAVE A, SAVEINCINC A AMOVC A, A+DPTRMOVC A, A+DPTRPUSHPUSH ACC ACC;子程序首址高;子程序首址高8 8位进栈位进栈RETRET;子程序首址弹入;子程序首址弹入PCPCTBL:DWROUT0 ;256个子程序首址DWROUT1.DWROUT255说明:执行这段程序后,栈指针SP并不受影响,仍恢复为原来的值。 二二、 mmn n矩阵元素查找程序矩阵元素查找程序MATRIXMATRIX 设设mmn n矩阵如下:矩阵如下:X0,0 X0,1
23、X0,j X0,n-1X0,0 X0,1 X0,j X0,n-1X1,0 X1,1 X1,j X1,n-1X1,0 X1,1 X1,j X1,n-1. . . . . . . . . . . . . . . . . . .Xi,0 Xi,1 Xi,j Xi,n-1Xi,0 Xi,1 Xi,j Xi,n-1. . . . . . . . . . . . . . . . . . .Xm-1,0 Xm-1,1 Xm-1,j Xm-1,n-1Xm-1,0 Xm-1,1 Xm-1,j Xm-1,n-1 元素在存储器中逐行存放,即从低地址到高地址为X0,0 X0,1 Xm-1,n-1 共占mn,各占2个单
24、元,这样元素Xi,j存放地址的算法应为:元素地址=表基址+(in+j)2其中 i=0(m-1) ; j=0(n-1)功能:根据元素下标查找元素值。入口:(I)=元素下标变量i (J)=元素下标变量j出口:(AR3)=双精度矩阵元素Xi,j的值MARTIX:MARTIX:MOVMOV A,IA,IMOVMOV B,#NB,#NMULMULABAB; (A)=i; (A)=in+jn+jADDADDA,J A,J RL RL A ; (A)=( iA ; (A)=( in+j )n+j )2 2MOVMOV R3,AR3,A;保存变址;保存变址ADDADDA,#05 A,#05 ;修改变址;修改变
25、址MOVC A,A+PCMOVC A,A+PC;查;查Xi,jXi,j的低位的低位XCHXCHA,R3A,R3;低位送;低位送R3R3,恢复变址,恢复变址INCINCA A;修正变址;修正变址INCINCA AMOVC A,A+PCMOVC A,A+PC;查;查Xi,jXi,j的高位的高位RETRETTAB:TAB:DWDWX X0,00,0,X,X0,10,1, X, X0,n-10,n-1 . . . . .DWDWX Xm-1,0m-1,0,X,Xm-1,1m-1,1, X, Xm-1,n-1m-1,n-1三、通过堆栈传递参数的方法 通常在调用子程序前要给子程序运行所要用到的参数,也就是
26、入口参数。子程序运行的结果应返回给调用程序,也就是出口参数。调用程序与子程序之间的这些参数传递一般可以采用以下三种方法: 1把参数装载到规定的工作寄存器(R0R7)或A中; 2把参数放在存储器中,通过地址R0,R1,DPTR; 3 通过堆栈传递参数。 通过堆栈传递参数的方法 调用程序:IDATA30HJDATA31H PUSHJPUSHIACALLSUBPOPACC子程序:SUBSUB:DECDECSPSPDECDECSPSPPOPPOPACCACC; I; IMOVMOV B B,#N#NMULMULABAB; I; I N NPOPPOP02H02H; J; JADDADDA A,R2R2
27、ADDADDA A,#7#7INCINCSPSPMOVC AMOVC A,A+PCA+PCPUSHPUSH ACC ACCINCINCSPSPINCINCSPSPRET DB说明:程序中两条DEC SP 指令是为了调整指针SP,使它指向下标变量I,而两条INC SP 指令则是调整指针使执行RET指令时正确返回。 习题一 P3411、14、21、24、28第二章第二章 C与与80512.1 8051的编程语言有4种语言支持,即汇编、PL/M、C和BASIC C语言作为一种方便的语言而得到支持,不依赖于机器的硬件系统。2.2 C51编译器 作为工业标准地位,从1985年开始就有8051单片机的C语
28、言编译器,简称C51。 P38 KEIL和IAR领先KEIL以它的紧凑代码和使用方便领先;IAR以它性能完善和资料完善领先。FRANKLIN V4.0 ARCHIMEDES V4.0单片机的C语言应用程序设计(第3版) 北京航空航天大学出版社Intel Microcontroller Data Sheet.1984 Schltz,Thomas W. C and 8051:Programming for multitasking .Prentice Hall 嵌入式C编程技术 单片机与嵌入式系统应用2001(16)单片机C语言Windows环境编程宝典KEIL Cx51 uVision2 2.3
29、 C51编程实例 小项目 编译链接选项 程序开发过程 P47 图2-3 .c .a51 .obj .lst .lib .omf .hex .map .sym第三章第三章 C51数据与运算数据与运算 3.1 数据与数据类型 数据具有一定格式的数字或数值叫做数据。 数据类型数据的不同格式叫做数据类型。 数据结构数据按一定的数据类型进行的排列、组合、架构。 C51编译器具体支持的数据类型: 位型,无符号字符,有符号字符, 无符号整型,有符号整型,无符号长型, 有符号长型, 浮点和指针类型等。 bit, unsigned char,signed char,unsigned int, signed in
30、t, unsigned long,signed long, float,double P50 表31保存方式 P523.2 常量与变量 常量在程序运行的过程中,其值不能改变的。变量在程序运行中,其值可以改变的。 习惯上,符号常量名用大写,变量用小写,以示区别。 只有bit和unsigned char两种数据类型可以直接支持机器指令,必须慎重变量和数据类型的选择。 3.3 C51数据的存储类型与8051存储器结构 8051系列机在物理上有四个存储空间 1)片内程序存储器空间 2)片外程序存储器空间 3)片内数据存储器空间 4)片外数据存储器空间 8051片内数据存储器可划分为两类:00H7FH为
31、片内低128字节RAM区;80H0FFH为特殊功能寄存器区。低字节RAM区又可以划分为3个区域: 1)通用寄存器区(00H1FH)每个寄存器可以用寄存器名寻址,也可直接用字节地址寻址。 2)可位寻址区 可以按字节寻址操作,也可按位地址操作。 3)用户RAM区 程序存储器与数据存储器严格分开,特殊功能寄存器与片内数据存储器统一编址。 片内数据存储区是存放临时性传递变量或使用频率较高的变量的。 访问片内数据存储器速度较快,经常使用的变量置于片内数据存储器,而将不常用的置于片外数据存储器中。 寻址方式可使用直接和间接寻址。存储类型 说明 code 程序,MOVC A+DPTR访问 xdata 外部数
32、据,由MOVX DPTR访问 pdata 分页外部数据,由MOVX Ri访问 data 直接寻址内部数据存储区 bdata 可位寻址内部数据存储区 idata 间接寻址内部数据存储区 当使用code存储类型定义数据时,C51编译器会将其定义在代码空间(ROM或FLASH)。 访 问 片 内 数 据 存 储 器(data,bdata,idata)比访问片外数存(xdata, pdata)相对要快一些,因此可将经常使用的变量置于片内数存。例:例:bit flag;bit flag;布尔值布尔值code uchar table =1,2,3,”help”,oxff;code uchar table
33、=1,2,3,”help”,oxff;idata uint temp;idata uint temp;data char var; /char data var;data char var; /char data var;等价,尽量用后一种等价,尽量用后一种static unsigned long xdata array100;static unsigned long xdata array100;静态变量静态变量extern float idata x,y,z;extern float idata x,y,z;模块化编程模块化编程uint pdata dimension;uint pdata
34、 dimension;uchar xdata vector 1044;uchar xdata vector 1044;char bdata flags;char bdata flags;bit flag_0=flags0;bit flag_0=flags0;sbit P1_1=P11;sbit P1_1=P11; 如果省略掉数据类型,存储模式将自动决定变量的默认存储类型。作为编译的选项。存储模式 说明 SMALL 可直接寻址的内部数据存储区 COMPACT 分页外部数据存储区 LARGE 外部数据存储区 参数和局部变量放入3.4 8051特殊功能寄存器及其C51定义 对SFR的操作,只能用直接
35、寻址方式。 SFR中有11个寄存器具有位寻址能力。 特殊功能位代表了一个独立的定义类,不能与其它位定义和位互换。说明: 1bit 8051单片机有位操作指令,完整布尔处理器 2char即字节, int即字; 分为有符号和无符号数,默认值为signed char 即char 无论何时,应尽可能地使用无符号字符变量,因为它能直接被8051所接受。 如果使用有符号和无符号两种数据类型,那么就得使用两种格式类型的库函数,占用的存储空间成倍增长。 需要进行额外的操作来测试代码的符号位。这无疑会降低代码效率。使用缩写形式定义数据类型。 #define uchar unsigned char#define
36、uint unsigned int 3变量可以组合为结构和联合,也可定义多维数组,可通过指针访问变量。 4sbit, sfr简化对8051的SFR的访问 头文件reg51.h中有所有8051的SFR及可位寻址的位的定义,只要:#include 使用:P1=0 x10;TMOD=0 x01;TR0=1; EA=1;程序的开头都加上以下三行:#include#define uchar unsigned char#define uint unsigned int头文件reg51.h中有所有8051的SFR及可位寻址位的定义 bit direction_bit;uchar i;i=PSW;C=dire
37、ction_bit; P1=0 x10;direction_bit = C; PSW = i;#include#define PORTA XBYTE0 xffc0 i=PORTA; PORTA=i;习题三 P721、6 第五章第五章 C51构造数据类型构造数据类型 5.1 数组 数组是一组具有固定数目和相同类型成分分量的有序集合。5.2 指针 指针是C语言的一个重要概念,也是重要特色之一。5.2.1 指针的基本概念 变量的指针:就是变量的地址。 指向变量的指针变量:若有一个变量专门来存放另一个变量的地址,则该变量称为指向变量的指针变量。5.2.2 数组指针和指向数组的指针变量 数组的指针:就是
38、数组的起始地址。 指向数组的指针变量:用来存放一个数组的起始地址。5.2.3 关于KEIL C51的指针类型 支持“基于存储器的”指针和“一般”指针两种类型。基于存储器的指针:在编译时,一般被“行内”编码,无须库调用。一般指针:一般指针包括3个字节:2字节偏移和1字节存储器类型。 为了表示这种指针,必须用长整数来定义存储类型。 基于存储器的指针由C源代码中的存储类型决定。用这种指针可高效访问对象且只需1至2字节。1个字节 (idata *, data *, pdata *)2个字节 (code *, xdata *)例: P102 关于Keil C51的指针类型 一般指针 3字节char xd
39、ata *px;指针自身在默认存储区(取决于编译存储模式)char xdata *data pdx; 指针明确位于内部数存(data)data char xdata *pdx; 与上同,与早期C51版本兼容P88 例:开关控制指示灯#include#void msec(unsigned int);void main( ) unsigned char array10; unsigned char i; while for(i=0;i=9,i+) arrayi=P2=P0; msec(100); P92 例:温度转换#define uchar unsigned charuchar code tem
40、pt =32,34,36,37,39,41uchar ftoc(uchar degc) return temptdegc;main( ) x=ftoc(5);P99 例2#include#define uchar unsigned charuchar code m1 =“This is a test”;uchar code m2 =“You failed ”;uchar code m3 =“You passed ”;uchar code *code fail =&m10,&m20,0;uchar code *code pass =&m10,&m30,0;void display(uchar c
41、ode *message)uchar code *m;for (; *message !=0; message+)for (m=message; *m !=0; m+) P1=*m; main( ) display( &pass0);P111 在同一存储单元中分时操作不同类型数据#include #define uint unsigned int#define uchar unsigned charunion u uint word; struct uchar hi; uchar lo;bytes;union u newcount;uint oldcount;newcount.bytes.hi = TH1;newcount.bytes.lo = TL1;oldcount = newcount.word; 接口芯片用到一些固定外部数据存储器地址#include #define PORT XBYTE0 xffc0;#define COM XBYTE0 xdfff;#define DAT XBYTE0 xdffe; #define XBYTE(char *)0 x20000L)习题五 P113 1、5