版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章
单片机程序设计目录CONTENTS01汇编程序设计基础指令格式、寻址方式、8051指令系统与伪指令04单片机开发平台硬件平台与KeilμVision软件开发平台03C51程序设计数据类型、运算量、绝对地址访问、运算符与函数028051单片机组成汇编程序设计方法及任务训练05工程实践复位电路、时钟电路与最小系统06课程总结与回顾本章核心知识点梳理与关键技术难点回顾学习目标01指令系统掌握·汇编基础理解51单片机汇编指令的格式、分类与寻址方式,掌握常用伪指令及汇编程序设计方法。02
C51语言应用·编程进阶掌握C51语言的数据类型、运算量、绝对地址访问及函数结构,能够编写简单C51程序。03开发平台熟练·工具链整合熟悉单片机硬件开发平台与KeilμVision软件平台,能够独立完成项目创建、编译、调试与下载。。04工程实践落地·双语言编程通过汇编程序训练与第一个C51程序任务,具备初步的单片机程序设计与调试能力。机器语言:二进制代码,机器直接执行汇编语言:用助记符表示指令,如MOV、ADD特点:与硬件紧密相关,执行效率高适合底层驱动、电机控制、传感器接口等与高级语言对比:C语言更抽象,汇编更直接控制硬件2.1单片机汇编程序设计汇编语言与机器语言格式:[标号:]助记符[目的操作数,源操作数][注释]示例:LOOP:MOVA,#7FH;A←7FH字段说明:
标号:地址标志,如LOOP
助记符:操作类型,如MOV
操作数:数据或地址,如A、#7FH注释:以“;”开头注意:强调标号后必须加冒号,注释提高可读性。2.1.151单片机汇编指令格式操作数类型:
A、Rn、@Ri、direct、#data、#data16、bit、addr11/16、rel
等符号说明:@:间接寻址#:立即数(X):X中的内容→:传送方向立即数表示:二进制:10001111B十进制:88D或66十六进制:78H、0A8HASCII:'A'操作数类型与符号2.1.2寻址方式概述
理解寻址方式的两个角度1.直接vs间接2.寻址空间:RAM、ROM、SFR分类:
数的寻址:立即、寄存器、存储器(直接、间接、变址)、位寻址指令的寻址:绝对寻址、相对寻址1.立即数寻址(直接+ROM)
操作数为常数,只能作为源操作数格式:#data示例:MOVA,#20H功能:将立即数20H存入累加器A注:区分“#20H”与“20H”的区别(常数vs地址)。2.寄存器数寻址(直接+RAM)操作数在寄存器中,如R0~R7、A、DPTR示例:MOVA,R0
功能:将R0中的内容传送到A3.存储器数寻址——直接寻址直接寻址(直接+RAM)指令中直接给出存储单元地址
示例:MOVA,20H
功能:将片内RAM20H单元内容传送到ASFR也可直接使用名称,如MOVA,P0注:“20H”是地址,不是立即数存储器数寻址——寄存器间接寻址寄存器间接寻址(间接+RAM)地址存放在寄存器中,格式:@Ri、@DPTR示例:MOVA,@R1若R1=80H,片内RAM80H单元内容=20H,则A=20H注:R0、R1用于片内RAM,DPTR用于片外。变址寻址(间接+ROM)地址=基址+变址基址:DPTR或PC变址:A示例:MOVCA,@A+DPTR若DPTR=2000H,A=05H,则访问程序存储器2005H单元4.位寻址(直接+RAM)操作数为位地址
示例:MOVC,30H
位地址表示方式:直接地址:50H
字节地址带位:30H.6SFR带位:P1.1
位符号:TR151单片机有位处理器,适合布尔运算5.指令寻址(绝对寻址与相对寻址)绝对寻址:提供16位或11位目的地址如LJMPaddr16相对寻址:当前PC+偏移量rel如SJMPrel(rel范围:-128~+127)计算示例:1230H:SJMP46H→PC=1230H+2+46H=1278H2.1.38051汇编指令系统格式:MOV目的操作数,源操作数常见组合:·MOVA,Rn·MOVRn,#data·MOVdirect,A·MOV@Ri,direct·MOVDPTR,#data16注意:不能同时出现两个Rn或两个@Ri1.片内RAM传送指令MOV2.片外RAM与ROM传送指令MOVX(片外RAM):·MOVXA,@DPTR·MOVX@Ri,AMOVC(程序存储器):·MOVCA,@A+DPTR·MOVCA,@A+PC示例:将程序存储器1011H内容传送到片内30HMOVC用于查表,MOVX用于扩展RAM。3.程序存储器传送指令MOVC程序存储器传送指令只有两条:一条用DPTR基址变址寻址;一条用PC基址变址寻址(地址增长)①MOVCA,@A+DPTR;A←(A+DPTR),读程序存储器。②MOVCA,@A+PC;A←(A+PC
)将程序存储器单元送到片内数据存储器单元MOVR7,#255DEL1:MOVR6,#255DEL2:DJNZR6,DEL2DJNZR7,DEL1延时≈0.13秒4.减1不为零转移指令DJNZ减1不为零转移指令DJNZ格式:DJNZRn,relDJNZdirect,rel功能:先减1,若不为零则转移延时示例(12MHz晶振,1μs/机器周期):```asmMOVR7,#255DEL1:MOVR6,#255DEL2:DJNZR6,DEL2DJNZR7,DEL1```延时≈0.13秒2.1.4伪指令伪指令:控制汇编过程,不生成机器码常见伪指令:ORG、DB、END示例:ORG1000HDB34H,0DEH,"A","B"END功能:定义起始地址、存储数据、结束汇编常用伪指令详解伪指令功能示例:ORG设置起始地址ORG0030HDB定义字节数据DB12H,"A"END结束汇编ENDORG可多次使用,地址由小到大END只能有一个,后续代码不处理2.1.5汇编程序设计步骤1.分析问题,明确目标2.建立数学模型3.绘制流程图4.编写代码5.调试完善算法+数据结构=程序程序结构——顺序与分支顺序结构:按地址顺序执行分支结构:根据条件选择执行路径流程图符号:开始框、判断框、处理框、流向线顺序结构的流程图基本双分支结构的流程图程序结构——循环与子程序循环结构:重复执行某段代码示例:DJNZR6,DE2子程序:模块化复用代码
使用RET返回
注意现场保护(PUSH/POP)(a)先循环后判断(b)先判断后循环子程序参数传递方式传递方式适用场景寄存器:数据量小MOVA,#data存储器:数据量大参数表+指针堆栈:子程序嵌套PUSH/POP汇编程序示例ORG0000HLJMPMAINORG0030HMAIN:SETBP1.0CALLDEL1SCLRP1.0CALLDEL1SAJMPMAIN功能:输出周期为2s的方波信号2.2C51程序设计C语言特点:
·简洁、运算符丰富、数据结构灵活
·可结构化、模块化编程
·可移植性强、目标代码高效C语言=高级语言+低级硬件控制能力C程序结构与规则每个变量先声明后使用语句以分号结尾注释://或/**/花括号对齐,层次清晰一个程序必须有一个main()函数C51语言C51与标准C的区别数据类型无位类型支持bit,sbit,sfr存储器访问通用支持多种存储类型中断服务不支持支持interrupt主函数可返回通常死循环C51语言优点编程时无须考虑不同存储器的寻址和数据类型等细节问题。具有良好的模块化结构。丰富的子程序库可供直接引用。C51语言和汇编语言可以交叉使用。2.2.2C51语言的数据类型C51语言的基本数据类型有字符型char、短整型short、整型int、长整型long、浮点型float和双精度型double基本数据类型名称长度取值范围unsignedchar无符号字符型1字节0~255signedchar有符号字符型1字节-128~+127unsignedint无符号整型2字节0~65535signedint有符号整型2字节-32768~+32767unsignedlong无符号长整型4字节0~4294967295signedlong有符号长整型4字节-2147483648~+2147483647float浮点型4字节±1.175494E-38~±3.402823E+38bit位型1位0或1sbit特殊位型1位0或1sfr8位特殊功能寄存器1字节0~255sfr1616位特殊功能寄存器2字节0~65535C51的基本数据类型
C51语言的组合数据类型
(1)数组:一维数组,字符数组。(2)结构。将若干不同类型的变量结合在一起而形成的一种数据集合体。组成结构的各个变量称为结构元素或成员。(3)联合体。各个变量在内存中都从同一个地址开始存储(4)枚举。列出该类型变量的所有可取值。
组合数据类型——数组
一维数组定义:类型数组名[常量表达式];初始化:charNavi[6]={'F','L','O','W','E','R'};引用:数组名[下标],下标从0开始字符数组可用字符串初始化:charstr[10]="Hello";
结构体、联合体、枚举类型关键字内存分配结构体(struct)
各成员独立分配联合体(union)
所有成员共享同一地址枚举(enum)
整型常量集合示例:struct{inta;charb;}s1;union{inti;floatf;}u1;enumweek{Sun,Mon,Tue};
C51扩展类型bit:可移位地址的位变量sbit:固定地址的位变量(如P1.0)sfr:8位特殊功能寄存器Sfr16:16位特殊功能寄存器(如DPTR)示例:sfrP1=0x90;sbitLED=P1^0;bitflag=0;
数据类型转换
隐式转换优先级:bit→char→int→long→float↓unsigned
强制转换:使用(类型)进行人为转换示例:unsignedchara=100;intb=a+1000;//自动转为intfloatc=(float)a/3.14;```2.2.3C51语言的运算量整型常量:
十进制:123,-56十六进制:0x12长整型:123L浮点型常量:定点形式:0.123指数形式:123.456e-31.常量——整型与浮点型字符常量与字符串常量
字符常量:单引号,如'a',占1字节字符串常量:双引号,如"A",占2字节(含\0)字符ASCII码值!33048149957A65B66a97b98转义字符含
义ASCII码(十六进制数)\
0空字符(null)00H\
n换行符(LF)0AH\
r回车符(CR)0DH\
t水平制表符(HT)09H\
b退格符(BS)08H\
f换页符(FF)0CH\
‘单引号27H\
”双引号22H\
\反斜杠5CH2.变量
[存储种类]数据类型[存储类型]变量名[=初值];示例:autounsignedchardatavar1=10;staticintxdatavar2;externfloatvar3;定义格式
存储种类
种类关键字作用域生命周期
自动auto函数内函数调用期间外部extern多文件程序全程静态static函数内/文件内程序全程寄存器register函数内函数调用期间register变量建议编译器存入寄存器,不保证一定分配存储器类型描
述data变量位于片内RAM低128B空间,直接寻址访问,速度快bdata变量位于片内RAM的可位寻址区(20H~2FH),允许字节和位混合访问idata变量位于片内RAM256B空间,用Ri寄存器间接寻址访问pdata变量位于片外RAM低256B空间,用Ri间接访问xdata变量位于片外RAM64KB空间,用DPTR间接访问code变量位于程序存储器ROM64KB空间,基址变址寻址访问C51的存储器类型描述存储器类型存储器类型示例chardatavar1;//片内低128Bintidatavar2;//片内256Bfloatxdatavar4;//片外RAMintcodevar5;//程序存储器unsignedcharbdatavar6;//可位寻址区省略存储器类型时,按默认存储模式分配指针变量概述指针:变量的地址·指针变量:存储地址的变量取地址运算符:&指针运算符:*示例:inta=10;int*p=&a;//p指向a*p=20;//修改a的值为20指针变量定义一般形式:数据类型[存储器类型]*指针变量名;示例:int*p1;//一般指针(3B)chardata*p3;//指向片内data区(1B)floatxdata*p4;//指向片外xdata区(2B)带存储器类型的指针占用更少内存指针应用示例示例intx=5,y;int*ptr;//定义指针变量ptr=&x;//ptr指向xy=*ptr;//y=5*ptr=10;//x=10指针使用前必须指向有效地址
指针类型必须与指向变量类型一致C51扩展变量类型1.指针变量的应用2.特殊功能寄存器变量(sfr/sfr16)
sfr:8位特殊功能寄存器sfr16:16位特殊功能寄存器
地址为直接地址形式3.位变量(bit/sbit)bit类型:定义一般位变量
sbit类型:定义可位寻址字节中的位3.C51存储模式small(data):
变量在片内RAM,速度快Compact(pdata):
变量在片外低256Blarge(xdata)
:变量在片外64KB示例#pragmacompact//设置模式intfunc1(intx)large//函数单独指定{return(x+1);}2.2.4绝对地址访问——宏定义使用absacc.h
头文件中的宏:宏的功能XBYTE[addr]访问xdata区字节XWORD[addr]访问xdata区字DBYTE[addr]访问data区字节示例#include<absacc.h>ucharvar1=XBYTE[0x0005];//读xdata0005HXWORD[0x0002]=0x1234;//写xdata0002H字绝对地址访问——指针与关键字at指针方式:uchar
xdata*dp;dp=0x1000;*dp=0xFF;at关键字(全局变量):datacharx1_at_0x40;//data区40Hxdataintx2_at_0x2000;//xdata区2000H2.2.5运算符、表达式、语句的关系语句=表达式+分号表达式=操作数+运算符示例:c=a+b;//完整语句a+b//表达式,无分号三者的关系是编程基础2.算术运算符Ⅰ.运算符格式:变量=表达式;运算符名称或含义+加或取正值运算符-减或取负值运算符*乘运算符/除运算符%取余运算符1.赋值运算符4.逻辑运算符运算符名称或含义>
大于<
小于>=大于等于<=小于等于==等于!=不等于“逻辑与”的格式:条件式1&&条件式2。当条件式1与条件式2都为真时,结果为真,否则为假。“逻辑或”的格式:条件式1||条件式2。当条件式1与条件式2都为假时,结果为假,否则为真。“逻辑非”的格式:!条件式。当条件式原来为真时,逻辑非后结果为假;当条件式原来为假时,逻辑非后结果为真。例如,若a=8,b=3,c=0,则!a为假,a&&b为真,3.关系运算符运算符名称或含义||逻辑或&&逻辑与!逻辑非示例:if((a>b)&&(b<c)){...}6.复合赋值运算符a+=6相当于a=a+6a*=5相当于a=a*5b&=0x55相当于b=b&0x55
x>>=2相当于x=x>>25.位运算符示例:a=0x54,b=0x3B·a&b=0x10·a|b=0x7F·a<<2=0x50运算符名称或含义&按位与|按位或^按位异或~按位取反<<
左移>>
右移运算符名称或含义运算符名称或含义+=加法赋值-+减法赋值*=乘法赋值/=除法赋值%=取模赋值&=逻辑与赋值<<=左移位赋值>>=右移位赋值|=逻辑或赋值^=逻辑异或赋值~=逻辑非赋值
8.条件运算符7.逗号运算符逗号运算符:x=(a=3,6*3);//x=18条件运算符(唯一三目运算符):max=(a>b)?a:b;指针运算符:int*p=&x;//&取地址*p=10;//*访问内容表达式1,表达式2,…,表达式n逻辑表达式?表达式1:表达式29.指针与地址运算符运算符优先级要点1.括号()最高2.单目!~*&3.算术*/%高于+-4.关系><>=<=高于==!=5.逻辑&&高于||6.赋值较低不确定时加括号:if((a>b)&&(b<c))Ⅱ.表达式Ⅲ.语句分类表达式语句a=3+2;空语句;复合语句{a=1;b=2;}选择语句if,switch循环语句while,for,do-while跳转语句break,continue,return1.If语句三种格式格式1:
if(表达式)语句;格式2:
if(表达式)语句1;else语句2;格式3(多分支):if(表达式1)语句1;elseif(表达式2)语句2;else语句n;2.switch/case语句switch(表达式){case常量1:语句1;break;case常量2:语句2;break;default:{语句n+1};}特点:表达式为整型或字符型case常量必须唯一break防止“穿透”3.While语句while(表达式){
语句;//循环体}特点:先判断,后执行。条件不满足时循环体可能一次都不执行。示例:1~100累加和inti=1,s=0;while(i<=100){s=s+i;
i++;}4.do-while语句格式:do{
语句;//循环体}while(表达式);特点:先执行,后判断。循环体至少执行一次。示例:1~100累加和inti=1,s=0;do{s=s+i;i++;}while(i<=100);5.for语句格式:for(表达式1;表达式2;表达式3){
语句;//循环体}表达式1:初值表达式
表达式2:条件表达式
表达式3:更新表达式示例:1~100累加和inti,s=0;for(i=1;i<=100;i++)s=s+i;6.break和continue语句作用break跳出整个循环(终止循环)continue结束本次循环,继续下一次判断示例:面积>100时跳出for(r=1;r<=10;r++){area=p*r*r;if(area>100)break;}continue示例:输出不能被3整除的数if(i%3==0)continue;printf("%d",i);7.goto
、return与函数调用语句goto语句(慎用):goto
语句标号;语句标号:语句;return语句:return;//无返回值return(表达式);//带回返回值goto可能降低程序可读性,结构化编程中尽量少用函数调用语句的格式:函数名(实参列表);2.2.6函数函数的分类:由来源分为标准库函数/用户自定义函数返回值分为有返回值/无返回值(void)参数分为有参函数/无参函数main函数特点:程序入口,不能被其他函数调用成功执行返回1,否则返回0函数的定义格式函数类型函数名(形参列表)[reentrant][interruptm][usingn]{
局部变量定义;
函数体;}示例:intadd(inta,intb){returna+b;}函数的调用与声明调用格式:函数名(实参列表);声明格式:[extern]函数类型函数名(形参列表);外部函数声明示例:externserial_initial();//函数在另一个文件中voidmain(){
serial_initial();}函数的嵌套与递归嵌套:函数A调用函数B递归:函数直接或间接调用自身重入函数(reentrant):intfact(intn)reentrant{if(n==0)return1;elsereturnn*fact(n-1);}递归需有终止条件,避免无限调用I/O函数——printf格式:printf("格式控制字符串",输出列表);常用格式字符:格式字符数据类型输出格式dint带符号十进制数uint无符号十进制数oint无符号八进制数xint无符号十六进制数,用“a~f”表示Xint无符号十六进制数,用“A~F”表示ffloat带符号十进制数浮点数,形式为[-]dddd.dddde,Efloat带符号十进制数浮点数,形式为[-]d.ddddEddg,Gfloat自动选择e或f格式中更紧凑的一种输出格式cchar单个字符s指针指向一个带结束符的字符串p指针带存储器批示符和偏移量的指针,形式为M:aaaa其中,M可分别为:C(code),D(data),I(idata),P(pdata)。如M如M为a,则表示的是指针偏移量I/O函数——scanf格式:scanf("格式控制字符串",地址列表);注意事项:地址列表需使用&取地址输入格式需与控制字符串匹配示例:inta,b;scanf("%d,%d",&a,&b);使用printf/scanf前需包含#include<stdio.h>中断服务程序(interrupt)格式:void函数名()interruptm[usingn]{//中断处理代码}M中断源取值:0——外部中断01——定时/计数器T0中断2——外部中断13——定时/计数器T1中断4——串口中断5——定时/计数器T2中断中断服务程序注意事项1.无参数传递,不能有参数声明2.无返回值,建议定义为void3.不能直接调用,由硬件触发4.使用usingn指定工作寄存器组(n=0~3)5.编译器自动在8m+3处生成中断向量示例:voidint0()interrupt0using1{intx;x++;}2.3单片机开发平台主控芯片:STC89C52/STC12系列
兼容标准8051指令8KBISPFlash12MHz晶振,1机器周期=1μs最小系统组成:时钟电路+复位电路+电源单片机不能正常工作时:检查电源、晶振、复位电平2.3.1硬件开发平台开发板模块介绍2.3.2软件开发平台由德国Keil公司出品,集成C编译器、宏汇编、连接器、调试器,支持众多单片机型号μVisionforWindows(32/64位)主要功能:编辑源程序编译生成hex文件仿真调试1.Keil2.STC-ISP烧录工具烧录步骤:1.选择单片机型号(如STC89C52RC)2.打开.hex文件3.选择COM串口号4.单击“Download/下载”使用CH340驱动时需安装USB驱动下载前关闭串口调试助手(避免冲突)3.串口调试助手功能:显示单片机与计算机的交互信息设置要点:选择正确串口号设置波特率数据位=8位字符格式发送(或十六进制)电平转换:RS-232:使用MAX232USB转TTL:使用CH340C2.4工程实践任务:两个8位无符号数求和代码(mcu203.asm):ORG0000HMOVA,#01HMOVB,#02HADDA,BSJMP$END操作步骤:1.Keil中新建项目2.添加.asm源文件3.编译生成hex文件4.仿真运行,观察A和B寄存器Keil调试方法(一)单步执行:快捷键F11(Step)逐条执行指令,可进入子程序内部过程单步:快捷键F10(StepOver)将子程序/函数作为一条语句全速执行运行到光标行:光标定位到目标行选择“RuntoCursorline”全速运行时遇到断点会停止Keil调试方法(二)修改程序流程:1.退出调试环境2.修改源程序3.重新编译、链接4.再次进入调试Keil调试窗口:输出窗口(OutputWindow)观察窗口寄存器窗口存储器窗口(MemoryWindow)存储器窗口的使用查看指定地址:
在MemoryWindow中输入地址表达式C:程序存储器(code)D:片内数据存储器(data)I:间接寻址片内RAM(idata)X:片外数据存储器(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国文物信息咨询中心公开招聘工作人员4人笔试历年参考题库附带答案详解
- 2025年“才聚齐鲁成就未来”山东健康集团高校毕业生春季校园招聘666人笔试历年参考题库附带答案详解
- 2025平煤集团国际贸易公司面向集团内部招聘1人笔试历年参考题库附带答案详解
- 2025山东高唐县财信投资发展集团有限公司招聘6人笔试历年参考题库附带答案详解
- 2025届中铁城建集团有限公司校园招聘笔试历年参考题库附带答案详解
- 2025届中国通号校园招聘笔试历年参考题库附带答案详解
- 2025太行实验室面向全球诚聘高层次人才笔试历年参考题库附带答案详解
- 2025中铁第六勘察设计院集团有限公司通号院公开招聘1人笔试历年参考题库附带答案详解
- 2025中国大唐集团卓越工程师培养中心办公室所属机构岗位公开招聘5人笔试历年参考题库附带答案详解
- 网络营工程与服务外包流程手册
- 超星尔雅学习通《美术鉴赏(北京大学)》2025章节测试附答案
- FANUC机器人ARC Mate 120iD和M-20iD机械结构手册
- DB37T 2401-2022 危险化学品岗位安全生产操作规程编写导则
- 项管系统培训变更与修正
- 红色文化知识题【高中组共计967题】1 (1)附有答案
- HYT 271-2018 海洋多参数水质仪检测方法(正式版)
- 曲黎敏《黄帝内经》-全套讲义
- 万宁市病死畜禽无害化处理中心项目 环评报告
- 《引航》系列特刊2-《共建绿色丝绸之路进展、形势与展望》
- 全国优质课一等奖小学道德与法治六年级下册《地球-我们的家园》第1课时(完美版课件)
- GB/T 311.1-2012绝缘配合第1部分:定义、原则和规则
评论
0/150
提交评论