第5章 C语言程序设计及仿真调试.ppt

上传人:创****公 文档编号:1593582 上传时间:2019-10-19 格式:PPT 页数:89 大小:4.35MB
返回 下载 相关 举报
第5章 C语言程序设计及仿真调试.ppt_第1页
第1页 / 共89页
第5章 C语言程序设计及仿真调试.ppt_第2页
第2页 / 共89页
点击查看更多>>
资源描述

《第5章 C语言程序设计及仿真调试.ppt》由会员分享,可在线阅读,更多相关《第5章 C语言程序设计及仿真调试.ppt(89页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第五章 单片机的C语言程序设计及仿真调试,任课教师:刘忠国山东大学课程中心网站: http:/ stc15系列单片机器件手册等keil vision软件下载及指导手册(Helpvision Help) http:/ Software Cx51 编译器用户手册: Cx51编译器-对传统和扩展的8051微处理器的优化的C编译器和库参考,2,第五章 单片机的C语言程序设计及仿真调试,本章学习目标掌握单片机C语言程序中的常用功能掌握Keil C的程序设计掌握STC15F2K60S2单片机C语言程序调试过程,3,第五章 单片机的C语言程序设计及仿真调试,目 录5.1 单片机C语言程序中的常用功能5.1.

2、1 逻辑运算和位运算5.1.2 预处理5.2 Keil C 和 ANSI C5.2.1 Keil C51扩展关键字5.2.2 扩展I/O口的使用5.2.3 Keil C51函数5.2.4 STC15F2K60S2单片机C51程序框架5.3 单片机C语言程序调试,4,汇编语言和C语言的选择问题,设计规模较小的嵌入式应用系统时,可以使用汇编语言。因为代码一般不长,且较简单。当程序比较复杂,且没有很好的注释时,使用汇编语言编写的程序,可读性和可维护性会很差,代码的可重用性也比较低。使用C语言编程,编写简单、直观易读、便于维护、通用性好。在控制任务比较复杂或者具有大量运算的系统中,C语言优势明显。由于

3、模块化,用C语言编写的程序具有很好的可移植性。,5,5.1 单片机C语言程序中的常用功能,5.1.1 逻辑运算和位运算1、逻辑运算符逻辑运算符包括与(&), 或(|), 非(!)3种, 用于逻辑运算。逻辑运算符的表达式, 返回0表示“假”, 返回1表示“真”。,6,与运算符(&)功能:两个条件同时满足时(即两个条件都为真时),结果才为真。如一个程序在同时满足条件a10和b=7时,则执行某些操作,应使用关系运算符和逻辑与运算符(&) 来写这个条件的代码: (a10)&(b=7)。,按布尔逻辑值(真假)运算,1、逻辑运算符,或运算符(|)功能:检查两个条件中是否有一个为真,只要有一个条件为真,运算

4、结果就为真。对条件a10和b=7, 若任一条件为真,程序执行某操作,则条件代码为: (a) 。,8,(1)按位“与”运算: 按位与运算符“&” 是双目运算符。功能: 参与运算的两数各对应二进制位相与。只有对应的两位均为1时,结果位才为1,否则为0。例如,9&5的算式:00001001&0000010100000001按位与运算通常用来对某些位清0或保留某些位。例把16位数a的高8位清0,保留低8位,可作运算:a&255 (255的二进制数为0000000011111111)。,(2)按位“或”运算,按位或运算符“|”是双目运算符。功能是参与运算的两数各对应的二进制位相或。只要对应的两个位有一个

5、为1时,结果位就为1。例如,9|5的算式: 00001001(十进制为9) | 00000101(十进制为5) 00001101 (十进制13)或运算通常用来对某些位置1。,9,(3)按位“异或”运算,按位异或运算符“”是双目运算符。功能是参与运算的两数各对应的二进制位相异或。当两个对应的位相异时,结果为1。例如,95的算式:00001001(十进制为9) 00000101(十进制为5)00001100 (十进制12)异或运算通常用来对某些位取反。,10,(4)求反运算,求反运算符“”为单目运算符,具有右结合性。功能是对参与运算的数的各二进制位按位求反。例如,9的运算为:(0000000000

6、001001)结果为:1111111111110110,11,(5)左移运算左移运算符“”是双目运算符。功能:把“”符左边运算数的各二进制位都左移若干位, “” 符右边的数指定移动位数,高位丢弃,低位补0。例如:a”是双目运算符。功能是把“”左边的运算数的各二进制位全部右移若干位,“”右边的数指定移动的位数。例如,设 a=15,a2 000001111右移2位为00000011(十进制3)。对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。,12,5.1.2 预处理,以“#”号开头的命令是预处理命令。语言的预处

7、理功能包括宏定义#define, 文件包含#include, 条件编译等。合理地使用预处理功能,可以使得编写的程序便于阅读、修改、移植和调试,也利于模块化程序设计。,13,1、宏定义(#define)在语言源程序中允许用一个标识符来表示一个字符串,称为宏。被定义为宏的标识符称为宏名。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换,这称为宏代换或宏展开。宏代换是由预处理程序自动完成的。在语言中,宏分为有参数和无参数两种。,(1)无参宏定义,无参宏的宏名后不带参数。其定义的一般形式为: #define 标识符 字符串其中,标识符为所定义的宏名。字符串可以是常数,表达式,格式串等

8、。若要终止宏定义,可用#undef命令: #undef 标识符 符号常量的定义就是一种无参宏定义。此外,常对程序中反复使用的表达式进行宏定义。,14,例如: #define PI 3.14159 #define M (y*y+3*y)程序中的语句: L=2*PI; s=3*M+M/2; 经宏代换后为: L=2*3.14159; s=3*(y*y+3*y)+(y*y+3*y)/2,(2)带参宏定义,在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。带参宏定义的一般形式为: #define 宏名(形参表) 字符串,15,在字符

9、串中含有各个形参。例如: #define MAX(a,b) (ab)?a:b /取a和b的最大数,例如,程序中的语句: max=MAX(x,y); 经宏代换后为: max=(xy)?x:y;,带参宏调用的一般形式为: 宏名(实参表);,2、文件包含(#include),文件包含的一般形式为: #include 文件名功能是把指定文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。,16,说明: (头)文件名可用双引号括起来(用户头文件), 也可用尖括号括起来(系统头文件)。如:#include “stdio.h”, #include 。 二者区别: 用尖括号表示

10、在包含文件目录中去查找(包含目录可由用户在开发环境中设置, 一般在INC), 而不在源文件目录去查找;用双引号则表示首先在当前源文件目录中查找, 若未找到才到包含目录中去查找。,3、条件编译,条件编译就是按不同的条件去编译不同的程序部分,从而产生不同的目标代码文件。条件编译对于程序的移植和调试(可以分段调试)非常有用。特别在操作系统的裁减中,经常使用条件编译。,17,(1)第一种形式:#ifdef 标识符 程序段1 #else 程序段2 #endif功能是:如果标识符已被#define命令定义过,则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以

11、没有。,3、条件编译,(2)第二种形式: #ifndef 标识符 程序段1 #else 程序段2 #endif功能是:如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。这与第一种形式的功能正相反。,18,3、条件编译,(3)第三种形式: #if 常量表达式 程序段1 #else 程序段2 #endif功能是,如果常量表达式的值为真(非0),则对程序段1进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能。,19,5.2 Keil C 和 ANSI C,Keil C51基本语法与ANSI C相同,针对8051内核单片机硬件等进行了扩展。5

12、.2.1 Keil C51扩展关键字 (共19个) _at_, sbit, sfr, bit, sfr16, code, idata, bdata, data, xdata, pdata, small, compact, large, using, reentrant, interrupt, alien, _task_,20,(或参考keil官网http:/ window Cx51 Compiler Users Guide),(或参考“keil software Cx51 编译器用户手册09.2001-对传统和扩展的8051微处理器的优化的C编译器和库参考”),(keil帮助文件介绍21个),

13、_priority_, far,下面分类介绍常用关键字:,alien(声明与Intel编译器PL/M51兼容的函数)。far声明3字节扩展地址。_task_, _priority_分别定义实时多任务操作系统的实时任务及其优先级。,1、存储区域(Memory Areas) (1)程序存储器,8051结构支持几个物理分开的程序和数据存储空间, 这些存储空间可能: 可读不可写; 可读写; 读写比别的存储空间快。(1)程序存储器:程序(CODE)存储区只读不能写 ,可在8051CPU片内或片外或都有, 根据8051派生硬件决定, STC15F2K60S只在片内。最多可有64K字节的程序存储区。存储程序

14、代码, 包括所有函数和库, 常数变量。8051可执行程序只保存在程序存储区。C51编译器中, 通过存储类型标识符code可访问程序存储器。,21,关键字,1、存储区域(Memory Areas) (1)程序存储器,(1)程序存储器:通过存储类型标识符code可访问程序存储器。code用来限定常量或函数的存储类型, 而程序的函数默认为code存储类型, 并不需code限定符(也可写上)。code一般只用来定义常量, 例:static code unsigned char DPY_TAB16=0X3f, 0X06, 0X5b, 0X4f, 0X66, 0X6d, 0X7d, 0X07, 0X7f,

15、 0X6f, 0X77, 0X7c, 0X39, 0X5e, 0X79, 0X71; / 用code定义共阴极数码管显示09,AF时对应的字模,22,关键字,1、存储区域(Memory Areas) (2)内部RAM,data:直接寻址区,内部RAM的低128字节, 地址范围是: 00H7FH。 idata: 间接寻址区, 包括整个内部RAM区, 256字节, 地址范围为00H0FFH。 bdata: 可位寻址区,地址范围为20H2FH。,23,(2)内部RAM数据存储器。位于51片内,可读写。根据51种类不同,最多256字节。低128字节可直接寻址,而高128字节只能间接寻址。可用以下关键字

16、分为3种存储类型:,特殊功能寄存器(0x800xFF)单独一类,见后。,1、存储区域(Memory Areas)(3)外部数据存储器,(3)外部数据存储器:可读写。采用数据指针访问,比访问内部数存要慢,最多可达64K字节。外部RAM可由以下关键字标识分为2种存储类型: :xdata:可指定多达64KB的外部直间接寻址区, 地址范围0000H0FFFFH。,24,xdata 可访问外部数存64K字节的任意位置, 只能通过数据指针(MOVX DPTR)来访问。pdata: 可访问外部数存的一页即256字节, 通过R0和R1 (MOVX Ri)来访问(有时可能需P2指出高8位地址)。,51对外设采取

17、统一编址, 外设也占用此空间, 可通过访问外部数存来控制外设-存储器映射I/O, 所以可用空间可能不足64K字节。,(对物理上(且逻辑上)在外部的数存)。,(片内XRAM只能访问00-0FFh)。,在Xtal(MHz)右侧框输入6,其余按默认设置。,4-10-2 Keil Vision集成开发环境调试汇编语言程序方法,Project窗口,选中Target 1, 并单击右键, 出现浮动菜单。浮动菜单中选中 Options for Target Target 1.选项。,25,00:33:49,出现Options for Target Target 1 对话框界面。在该界面中,点击Target标签

18、。在该标签界面中,按下面设置参数:,在此设置使用晶振的频率,3. 针对目标硬件设置工具选项,Memory Model右侧下拉选择: Small, Compact, large。,1、存储区域(Memory Areas) 存储模式 (Small, large, Compact),数据存储类型的指定:变量或函数参数存储类型可由存储模式 (Small, large, Compact) (Options for Target Target 1.选项)指定缺省存储类型; 在small模式下, 函数参数和局部变量位于由data定义的单片机片内数据RAM(007FH)中;在compact模式下, 函数参数和

19、局部变量位于pdata定义的扩展数据RAM中(访问用MOVX Ri)。在large模式下, 函数参数和局部变量位于xdata定义的扩展数据RAM中(访问用MOVX DPTR),26,数据,1、存储区域(Memory Areas) 存储模式 (Small, large, Compact),数据存储类型的指定:变量或函数参数存储类型可由存储模式 (Small, large, Compact) (Options for Target Target 1.选项)指定缺省存储类型; 也可由关键字code、data、idata、bdata、xdata、pdata直接声明指定。例如: unsigned cha

20、r data buffer; char code array =“hello!”; unsigned char xdata arr1044;,27,数据,1、存储区域(Memory Areas) (4)特殊功能寄存器,(4)特殊功能寄存器(SFR) (128字节: 0x800xFF)单片机特殊功能寄存器(SFR)可位寻址,字节寻址或字寻址, 用来控制定时器, 计数器, 串口, I/O及其他部件。通过关键字sfr, sfr16和sbit声明数据类型,访问SFR。,28,sfr:字节寻址。语法如下: sfr sfr_name = int_constant;如 sfr P0=0x80; 0x80为P

21、0口寄存器的地址, “=” 后为常数用来指定地址, 且其范围必须位于80H到FFH。,sfr16:字寻址。 如sfr16 DPTR=0x82 ;指定DPTR地址DPL=0x82, DPH=0x83。,(4)特殊功能寄存器(SFR) (128字节: 0x800xFF),sbit:位寻址 用于声明可位寻址的特殊功能寄存器位变量,三种方法:,29,方法1:sbit bitname=sfr_namebit_number; sfr_name必须是已定义SFR的名字, bit_number是位号(07)。 如:sbit CY=PSW7; /定义CY为PSW的第7位。方法2:sbit bitname=sfr

22、_addressbit_number; sfr_address是SFR所在地址(0x800xff), bit_number是位号(07)。 如:sbit OV=0xD02;/定义PSW中的OV位方法3:sbit bitname=bit_address; 其中,bit_address是位地址。 如: sbit EA=0xAF; /第0xAF位为IE寄存器的EA位 (见46页特殊功能寄存器SFR中位地址),IE字节地址A8H,00:33,位寻址区-图3-11特殊功能寄存器SFR中位地址,特殊功能寄存器中位地址范围: 80H0FFH。,图3-11特殊功能寄存器中的位地址,30,1、存储区域(Memo

23、ry Areas) (4)特殊功能寄存器,Keil Cx51没有预先定义SFR的名字, 而是提供了一个包含所有特殊功能寄存器和它们的位定义的头文件reg51.h (在安装文件夹 .KeilC51INC)。通过包含头文件可很容易的进行新的扩展。附录C提供了STC15F2K60S2单片机的头文件stc15.h的内容,其中包含了标准8051单片机寄存器的定义,编程时只需包含这一个文件即可。该文件可从www.mcu001stcmcu. com中下载。在STC新ISP软件V6.85I中选择菜单选项 “头文件”即可找到STC各系列的头文件(包括stc15.h)。,31,1、存储区域(Memory Area

24、s) (4)特殊功能寄存器,STC15F2K60S2单片机的头文件stc15.h的内容,,32,/*- 8051内核特殊功能寄存器 -*/sfr ACC = 0xE0; /累加器sfr B = 0xF0; /B 寄存器sfr PSW = 0xD0; /程序状态字寄存器sbit CY = PSW7; /进位标志位sbit AC = PSW6; /辅助进位标志位sbit F0 = PSW5; /用户标志位0sbit RS1 = PSW4; /工作寄存器组选择控制位sbit RS0 = PSW3; /工作寄存器组选择控制位sbit OV = PSW2; /溢出标志位sbit F1 = PSW1; /

25、用户标志位1sbit P = PSW0; /奇偶标志位sfr SP = 0x81; /堆栈指针寄存器sfr DPL = 0x82; /数据指针0低字节sfr DPH = 0x83; /数据指针0高字节/*- 系统管理特殊功能寄存器 -*/sfr PCON = 0x87; /电源控制寄存器sfr AUXR = 0x8E; /辅助寄存器sfr INT_CLKO = 0x8F; /外部中断和时钟输出控制寄存器sfr AUXR1 = 0xA2; /辅助寄存器1sfr CLK_DIV = 0x97; /时钟分频控制寄存器sfr BUS_SPEED = 0xA1; /总线速度控制寄存器sfr WKTCL=

26、 0xAA; /掉电唤醒专用定时器低字节sfr WKTCH= 0xAB; /掉电唤醒专用定时器高字节/*- 中断控制特殊功能寄存器 -*/sfr IE = 0xA8; /中断允许寄存器sbit EA = IE7; /总中断允许位 sbit ELVD = IE6; /低电压检测中断控制位sbit EADC = IE5; /ADC中断允许控制位sbit ES = IE4; /串口1中断允许位sbit ET1 = IE3; /定时器1溢出中断允许位sbit EX1 = IE2; /外部中断1允许位sbit ET0 = IE1; /定时器0溢出中断允许位sbit EX0 = IE0; /外部中断0允许

27、位sfr IE2 = 0xAF; /中断允许寄存器2sfr IP = 0xB8; /中断优先级寄存器sbit PPCA = IP7; / PCA中断优先级控制位sbit PLVD = IP6; /低电压检测中断优先级控制位sbit PADC = IP5; /ADC中断优先级控制位sbit PS = IP4; /串口1中断优先级控制位sbit PT1 = IP3; /定时器1中断优先级控制位sbit PX1 = IP2; /外部中断1优先级控制位sbit PT0 = IP1; /定时器0中断优先级控制位sbit PX0 = IP0; /外部中断0优先级控制位sfr IP2 = 0xB5; /第二

28、中断优先级寄存器低字节/*- I/O 口特殊功能寄存器 -*/sfr P0 = 0x80; /P0口寄存器sfr P0M1 = 0x93; /P0口工作模式寄存器1sfr P0M0 = 0x94; /P0口工作模式寄存器0sfr P1 = 0x90; /P1口寄存器sfr P1M1 = 0x91; /P1口工作模式寄存器1sfr P1M0 = 0x92; /P1口工作模式寄存器0sfr P1ASF = 0x9D; /P1口模拟量功能设置寄存器sfr P2 = 0xA0; /P2口寄存器sfr P2M1 = 0x95; /P2口工作模式寄存器1sfr P2M0 = 0x96; /P2口工作模式寄

29、存器0sfr P3 = 0xB0; /P3口寄存器sbit T1 = P35; /定时器1外部输入sbit T0 = P34; /定时器0外部输入sbit INT1 = P33; /外部中断1sbit INT0 = P32; /外部中断0sbit TXD = P31; /串行输入通道sbit RXD = P30; /串行输出通道sfr P3M1 = 0xB1; /P3口工作模式寄存器1sfr P3M0 = 0xB2; /P3口工作模式寄存器0sfr P4 = 0xC0; /P4口寄存器sfr P4M1 = 0xB3; / P4口工作模式寄存器1sfr P4M0 = 0xB4; / P4口工作模

30、式寄存器0sfr P5 = 0xC8; /P5口(只有P5.3 P5.2 P5.1 P5.0)sfr P5M1 = 0xC9; / P5口工作模式寄存器1sfr P5M0 = 0xCA; / P5口工作模式寄存器0sfr P_SW2=0xBA; /外设功能切换控制寄存器/*- 定时器特殊功能寄存器 -*/sfr TCON = 0x88; /定时/计数控制寄存器sbit TF1 = TCON7; /定时器1溢出中断标志sbit TR1 = TCON6; /定时器1运行控制位sbit TF0 = TCON5; /定时器0溢出中断标志sbit TR0 = TCON4; /定时器0运行控制位sbit

31、IE1 = TCON3; /外部中断1请求标志sbit IT1 = TCON2; /选择外部中断请求1为边沿触发方式的控制位sbit IE0 = TCON1; /外部中断0请求标志sbit IT0 = TCON0; /选择外部中断请求0为边沿触发方式的控制位sfr TMOD = 0x89; /定时/计数模式控制寄存器sfr TL0 = 0x8A; /定时/计数器0低字节sfr TH0 = 0x8C; /定时/计数器0高字节sfr TL1 = 0x8B; /定时/计数器1低字节sfr TH1 = 0x8D; /定时/计数器1高字节sfr T2H=0xD6; /定时器2重新装载时间常数高字节sfr

32、 T2L=0xD7; /定时器2重新装载时间常数低字节/*- 串行口特殊功能寄存器 -*/sfr SCON = 0x98; /串行口控制寄存器sbit SM0 = SCON7; /串行口工作方式设定控制位0(与FE功能复用)sbit FE = SCON7;sbit SM1 = SCON6; /串行口工作方式设定控制位1sbit SM2 = SCON5; /UART的SM2设定sbit REN = SCON4; /接收允许位sbit TB8 = SCON3; /发送数据的第九位sbit RB8 = SCON2; /接收数据的第九位sbit TI = SCON1; /发送中断标志sbit RI =

33、 SCON0; /接收中断标志sfr SBUF = 0x99; /串口数据缓冲器sfr SADEN = 0xB9; /从机地址掩码寄存器sfr SADDR = 0xA9; /从机地址寄存器sfr S2CON = 0x9A; /串行口2控制寄存器sfr S2BUF = 0x9B; /串行口2数据缓冲器/*- 看门狗定时器寄存器 -*/sfr WDT_CONTR = 0xC1; /看门狗定时器控制寄存器/*- PCA 寄存器 -*/sfr CCON = 0xD8; /PCA控制寄存器sbit CF = CCON7; /PCA计数器溢出(CH,CL由FFFFH变为0000H)标志sbit CR =

34、CCON6; /PCA计数器计数允许控制位sbit CCF2 = CCON2; /PCA模块2中断标志sbit CCF1 = CCON1; /PCA模块1中断标志sbit CCF0 = CCON0; /PCA模块0中断标志sfr CMOD = 0xD9; /PCA工作模式寄存器sfr CL = 0xE9; /PCA计数器低8位sfr CH = 0xF9; /PCA计数器高8位sfr CCAPM0 = 0xDA; /PAC模块0的工作模式寄存器sfr CCAPM1 = 0xDB; /PAC模块1的工作模式寄存器sfr CCAPM2 = 0xDC; /PAC模块2的工作模式寄存器sfr CCAP0

35、L = 0xEA; /PAC模块0捕捉/比较寄存器低8位sfr CCAP0H = 0xFA; /PAC模块0捕捉/比较寄存器高8位sfr CCAP1L = 0xEB; /PAC模块1捕捉/比较寄存器低8位sfr CCAP1H = 0xFB; /PAC模块1捕捉/比较寄存器高8位sfr CCAP2L = 0xEC; /PAC模块2捕捉/比较寄存器低8位sfr CCAP2H = 0xFC; /PAC模块2捕捉/比较寄存器高8位sfr PCA_PWM0 = 0xF2; /PCA模块0 PWM寄存器sfr PCA_PWM1 = 0xF3; /PCA模块1 PWM寄存器sfr PCA_PWM2 = 0x

36、F4; /PCA模块2 PWM寄存器/*- ADC 寄存器 -*/sfr ADC_CONTR = 0xBC; /ADC控制寄存器, 本寄存器不支持位操作sfr ADC_RES = 0xBD; /ADC转换结果高8位寄存器sfr ADC_RESL = 0xBE; /ADC转换结果低2位寄存器/*- SPI 寄存器 -*/sfr SPSTAT = 0xCD; /SPI状态寄存器,本寄存器不支持位操作sfr SPCTL = 0xCE; /SPI控制寄存器sfr SPDAT = 0xCF; /SPI数据寄存器/*- ISP_IAP_EEPROM 寄存器 -*/sfr IAP_DATA = 0xC2;

37、/ISP/IAP Flash数据寄存器sfr IAP_ADDRH = 0xC3; /ISP/IAP Flash地址高字节sfr IAP_ADDRL = 0xC4; /ISP/IAP Flash地址低字节sfr IAP_CMD = 0xC5; /ISP/IAP Flash命令寄存器sfr IAP_TRIG = 0xC6; /ISP/IAP Flash命令触发器sfr IAP_CONTR = 0xC7; /ISP/IAP控制寄存器,1、存储区域(Memory Areas)(4)特殊功能寄存器,STC15F2K60S2单片机的头文件stc15.h的内容,,33,/*- 8051内核特殊功能寄存器 -

38、*/sfr ACC = 0xE0; /累加器sfr B = 0xF0; /B 寄存器sfr PSW = 0xD0; /程序状态字寄存器sbit CY = PSW7; /进位标志位sbit AC = PSW6; /辅助进位标志位sbit F0 = PSW5; /用户标志位0sbit RS1 = PSW4; /工作寄存器组选择控制位sbit RS0 = PSW3; /工作寄存器组选择控制位sbit OV = PSW2; /溢出标志位sbit F1 = PSW1; /用户标志位1sbit P = PSW0; /奇偶标志位sfr SP = 0x81; /堆栈指针寄存器sfr DPL = 0x82; /

39、数据指针0低字节sfr DPH = 0x83; /数据指针0高字节/*- 系统管理特殊功能寄存器 -*/sfr PCON = 0x87; /电源控制寄存器sfr AUXR = 0x8E; /辅助寄存器sfr INT_CLKO = 0x8F; /外部中断和时钟输出控制寄存器sfr AUXR1 = 0xA2; /辅助寄存器1sfr CLK_DIV = 0x97; /时钟分频控制寄存器sfr BUS_SPEED = 0xA1; /总线速度控制寄存器sfr WKTCL= 0xAA; /掉电唤醒专用定时器低字节sfr WKTCH= 0xAB; /掉电唤醒专用定时器高字节/*- 中断控制特殊功能寄存器 -

40、*/sfr IE = 0xA8; /中断允许寄存器sbit EA = IE7; /总中断允许位 sbit ELVD = IE6; /低电压检测中断控制位sbit EADC = IE5; /ADC中断允许控制位sbit ES = IE4; /串口1中断允许位sbit ET1 = IE3; /定时器1溢出中断允许位sbit EX1 = IE2; /外部中断1允许位sbit ET0 = IE1; /定时器0溢出中断允许位sbit EX0 = IE0; /外部中断0允许位sfr IE2 = 0xAF; /中断允许寄存器2sfr IP = 0xB8; /中断优先级寄存器sbit PPCA = IP7;

41、/ PCA中断优先级控制位sbit PLVD = IP6; /低电压检测中断优先级控制位sbit PADC = IP5; /ADC中断优先级控制位sbit PS = IP4; /串口1中断优先级控制位sbit PT1 = IP3; /定时器1中断优先级控制位sbit PX1 = IP2; /外部中断1优先级控制位sbit PT0 = IP1; /定时器0中断优先级控制位sbit PX0 = IP0; /外部中断0优先级控制位sfr IP2 = 0xB5; /第二中断优先级寄存器低字节/*- I/O 口特殊功能寄存器 -*/sfr P0 = 0x80; /P0口寄存器sfr P0M1 = 0x9

42、3; /P0口工作模式寄存器1sfr P0M0 = 0x94; /P0口工作模式寄存器0sfr P1 = 0x90; /P1口寄存器sfr P1M1 = 0x91; /P1口工作模式寄存器1sfr P1M0 = 0x92; /P1口工作模式寄存器0sfr P1ASF = 0x9D; /P1口模拟量功能设置寄存器sfr P2 = 0xA0; /P2口寄存器sfr P2M1 = 0x95; /P2口工作模式寄存器1sfr P2M0 = 0x96; /P2口工作模式寄存器0sfr P3 = 0xB0; /P3口寄存器sbit T1 = P35; /定时器1外部输入sbit T0 = P34; /定时

43、器0外部输入sbit INT1 = P33; /外部中断1sbit INT0 = P32; /外部中断0sbit TXD = P31; /串行输入通道sbit RXD = P30; /串行输出通道sfr P3M1 = 0xB1; /P3口工作模式寄存器1sfr P3M0 = 0xB2; /P3口工作模式寄存器0sfr P4 = 0xC0; /P4口寄存器sfr P4M1 = 0xB3; / P4口工作模式寄存器1sfr P4M0 = 0xB4; / P4口工作模式寄存器0sfr P5 = 0xC8; /P5口(只有P5.3 P5.2 P5.1 P5.0)sfr P5M1 = 0xC9; / P

44、5口工作模式寄存器1sfr P5M0 = 0xCA; / P5口工作模式寄存器0sfr P_SW2=0xBA; /外设功能切换控制寄存器/*- 定时器特殊功能寄存器 -*/sfr TCON = 0x88; /定时/计数控制寄存器sbit TF1 = TCON7; /定时器1溢出中断标志sbit TR1 = TCON6; /定时器1运行控制位sbit TF0 = TCON5; /定时器0溢出中断标志sbit TR0 = TCON4; /定时器0运行控制位sbit IE1 = TCON3; /外部中断1请求标志sbit IT1 = TCON2; /选择外部中断请求1为边沿触发方式的控制位sbit

45、IE0 = TCON1; /外部中断0请求标志sbit IT0 = TCON0; /选择外部中断请求0为边沿触发方式的控制位sfr TMOD = 0x89; /定时/计数模式控制寄存器sfr TL0 = 0x8A; /定时/计数器0低字节sfr TH0 = 0x8C; /定时/计数器0高字节sfr TL1 = 0x8B; /定时/计数器1低字节sfr TH1 = 0x8D; /定时/计数器1高字节sfr T2H=0xD6; /定时器2重新装载时间常数高字节sfr T2L=0xD7; /定时器2重新装载时间常数低字节/*- 串行口特殊功能寄存器 -*/sfr SCON = 0x98; /串行口控

46、制寄存器sbit SM0 = SCON7; /串行口工作方式设定控制位0(与FE功能复用)sbit FE = SCON7;sbit SM1 = SCON6; /串行口工作方式设定控制位1sbit SM2 = SCON5; /UART的SM2设定sbit REN = SCON4; /接收允许位sbit TB8 = SCON3; /发送数据的第九位sbit RB8 = SCON2; /接收数据的第九位sbit TI = SCON1; /发送中断标志sbit RI = SCON0; /接收中断标志sfr SBUF = 0x99; /串口数据缓冲器sfr SADEN = 0xB9; /从机地址掩码寄存

47、器sfr SADDR = 0xA9; /从机地址寄存器sfr S2CON = 0x9A; /串行口2控制寄存器sfr S2BUF = 0x9B; /串行口2数据缓冲器/*- 看门狗定时器寄存器 -*/sfr WDT_CONTR = 0xC1; /看门狗定时器控制寄存器/*- PCA 寄存器 -*/sfr CCON = 0xD8; /PCA控制寄存器sbit CF = CCON7; /PCA计数器溢出(CH,CL由FFFFH变为0000H)标志sbit CR = CCON6; /PCA计数器计数允许控制位sbit CCF2 = CCON2; /PCA模块2中断标志sbit CCF1 = CCON

48、1; /PCA模块1中断标志sbit CCF0 = CCON0; /PCA模块0中断标志sfr CMOD = 0xD9; /PCA工作模式寄存器sfr CL = 0xE9; /PCA计数器低8位sfr CH = 0xF9; /PCA计数器高8位sfr CCAPM0 = 0xDA; /PAC模块0的工作模式寄存器sfr CCAPM1 = 0xDB; /PAC模块1的工作模式寄存器sfr CCAPM2 = 0xDC; /PAC模块2的工作模式寄存器sfr CCAP0L = 0xEA; /PAC模块0捕捉/比较寄存器低8位sfr CCAP0H = 0xFA; /PAC模块0捕捉/比较寄存器高8位sf

49、r CCAP1L = 0xEB; /PAC模块1捕捉/比较寄存器低8位sfr CCAP1H = 0xFB; /PAC模块1捕捉/比较寄存器高8位sfr CCAP2L = 0xEC; /PAC模块2捕捉/比较寄存器低8位sfr CCAP2H = 0xFC; /PAC模块2捕捉/比较寄存器高8位sfr PCA_PWM0 = 0xF2; /PCA模块0 PWM寄存器sfr PCA_PWM1 = 0xF3; /PCA模块1 PWM寄存器sfr PCA_PWM2 = 0xF4; /PCA模块2 PWM寄存器/*- ADC 寄存器 -*/sfr ADC_CONTR = 0xBC; /ADC控制寄存器, 本

50、寄存器不支持位操作sfr ADC_RES = 0xBD; /ADC转换结果高8位寄存器sfr ADC_RESL = 0xBE; /ADC转换结果低2位寄存器/*- SPI 寄存器 -*/sfr SPSTAT = 0xCD; /SPI状态寄存器,本寄存器不支持位操作sfr SPCTL = 0xCE; /SPI控制寄存器sfr SPDAT = 0xCF; /SPI数据寄存器/*- ISP_IAP_EEPROM 寄存器 -*/sfr IAP_DATA = 0xC2; /ISP/IAP Flash数据寄存器sfr IAP_ADDRH = 0xC3; /ISP/IAP Flash地址高字节sfr IAP_ADDRL = 0xC4; /ISP/IAP Flash地址低字节sfr IAP_CMD = 0xC5; /ISP/IAP Flash命令寄存器sfr IAP_TRIG = 0xC6; /ISP/IAP Flash命令触发器sfr IAP_CONTR = 0xC7; /ISP/IAP控制寄存器,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 管理手册

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com