当前位置:文档之家› 单片机的查表程序

单片机的查表程序

单片机的查表程序
单片机的查表程序

在单片机开发过程中.一些非线性的控制过程.最适合做一个表格来.时时改变系统的参数.达到控制的目的.最常的如产生正弦的的程.就是建一个大的数组时时改变输出的8位字节送给外部DA.由DA生成一个完整的正弦波.当然了.LED显示也是一个例子.通过建一个数组来实现段码的点亮点灭.下面就是一个LED表---digits[0]

#define SEG_a 0x01

#define SEG_b 0x02

#define SEG_c 0x04

#define SEG_d 0x08

#define SEG_e 0x10

#define SEG_f 0x20

#define SEG_g 0x40

#define SEG_dot 0x80

unsigned char digits[10] = {

(SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f), // 0

(SEG_b|SEG_c), // 1

(SEG_a|SEG_b|SEG_d|SEG_e|SEG_g), // 2

(SEG_a|SEG_b|SEG_c|SEG_d|SEG_g), // 3

(SEG_b|SEG_c|SEG_c|SEG_f|SEG_g), // 4

(SEG_a|SEG_c|SEG_d|SEG_f|SEG_g), // 5

(SEG_a|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g), // 6

(SEG_a|SEG_b|SEG_c), // 7

(SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g), // 8

(SEG_a|SEG_b|SEG_c|SEG_d|SEG_f|SEG_g) // 9

};

C查表就太简单了temp2 = digits[ show_data[i] ];一句搞定,C中还有一个switch语句也是一个很好的用查表语句

C51汇编就相对麻烦一点.不过MCS-51指令系统中有专用的查表指令:MOVC A,@A+DPTR和MOV A,@A+PC.

MOVC A,@A+DPTR指令,DPTR作为基址寄存器时,其值为16位而且可根据需要设计,故可用于在64KROM范围内查表。编写查表程序时,首先把表的首址送入DPTR中,再将要查找的数据序号(或下表值)送入A中,然后就可以使用该指令进行查表操作,并将结果送累加器A中。

MOVC A,@A+PC指令,PC作为基址寄存器时,其值由指令的位置确定,它只能设在查表指令操作码下

的256个字节范围内。编写查表程序时,首先把查表数据的序号送入A中,再把从查表指令到表的首地址间的偏移量与A值相加,然后使用该指令进行查表操作,并把结果送累加器A中。

下面是把内部RAM 30H-37H单元中的十六进制数依次转换为ASCII码,并存入内部RAM 60H-6F H单元之中。用查表法编写程序。

分析:由于十六进制数是从0~F,对应的ASCII码为30H~46H,每一个单元存放的16进制数,转换为ASCII码后分别存入2个单元,低位存低地址,高位存高地址。用ANL A ,#0FH 分别取高4位和低4位。进行查表转换成相应的ASCII码。

MOVC A , @A+DPTR 程序如下:

ORG 0000H

AJMP MAININITIAL

ORG 0050H

MAININITIAL: ;给30H-37H赋初值

MOV R0,#30H ;设置存数指针R0初值

MOV R1,#00H ;设置赋值变量个数计数寄存器R1(循环计数器)初值

MOV DPTR,#initialtab

NEXTINITIAL:

MOV A,R1

MOVC A,@A+DPTR ;查表数据送累加器A

MOV @R0,A

INC R0 ;指针增一

INC R1 ;循环计数器增一

CJNE R1,#8,NEXTINITIAL ;判给30H-3FH赋初值完否

MAIN:

MOV R0,#30H ;设置十六进制数地址指针

MOV R1,#60H ;设置ASCII码地址指针

MOV R7,#08H ;需拼装的十六进制数字节个数

MOV DPTR,#ACSIITAB

ABC:

MOV A,@R0 ;取十六进制数

MOV B,A ;暂存

ANL A,#0F0H ;取十六进制数的字节高4位

RR A ;取十六进制数的字节高4位移到字节的低4位

RR A

RR A

RR A

MOVC A,@A+DPTR ;查表数据送累加器A

MOV @R1,A ;保存转换结果

INC R1 ;转换结果指针增一

MOV A,B

ANL A,#0FH ;取十六进制数的字节低4位

MOVC A,@A+DPTR ;查表数据送累加器A

MOV @R1,A ;保存转换结果

INC R1 ;转换结果指针增一

INC R0 ;转换数据指针增一

DJNZ R7,ABC ;继续

SJMP $

initialtab: ;给30H-37H赋值用初值表

DB 23H,6DH,09H,7FH,8CH,1EH,4BH,5AH

ACSIITAB: ;0~F,对应的ASCII码表

DB "012345678"

DB "9ABCDEF"

END

MOVC A,@A+PC程序如下:

ORG 0000H

AJMP MAININITIAL

ORG 0050H

MAININITIAL: ;给30H-37H赋初值

MOV R0,#30H ;设置存数指针R0初值

MOV R1,#00H ;设置赋值变量个数计数寄存器R1(循环计数器)初值MOV DPTR,#initialtab

NEXTINITIAL:

MOV A,R1

MOVC A,@A+DPTR ;查表数据送累加器A

MOV @R0,A

INC R0 ;指针增一

INC R1 ;循环计数器增一

CJNE R1,#8,NEXTINITIAL ;判给30H-3FH赋初值完否

MAIN:

MOV R0,#30H ;设置十六进制数地址指针

MOV R1,#60H ;设置ASCII码地址指针

MOV R7,#08H ;需拼装的十六进制数字节个数

MOV DPTR,#ACSIITAB

ABC:

MOV A,@R0 ;取十六进制数

MOV B,A ;暂存

ANL A,#0F0H ;取十六进制数的字节高4位

RR A ;取十六进制数的字节高4位移到字节的低4位

RR A

RR A

RR A

ACALL TRANACSAII ;查表数据送累加器A

MOV @R1,A ;保存转换结果

INC R1 ;转换结果指针增一

MOV A,B

ANL A,#0FH ;取十六进制数的字节低4位

ACALL TRANACSAII ;查表数据送累加器A

MOV @R1,A ;保存转换结果

INC R1 ;转换结果指针增一

INC R0 ;转换数据指针增一

DJNZ R7,ABC ;继续

SJMP $

initialtab: ;给30H-37H赋值用初值表

DB 23H,6DH,09H,7FH,8CH,1EH,4BH,5AH

TRANACSAII:

INC A ;查表之前A加1是因为MOVC指令与数据表之间有一个地址单元的间隔(RET指令)

MOVC A,@A+PC ;由于数据表紧跟MOVC指令之后,因此以PC作为基址寄存器比较方便.

RET

ACSIITAB: ;0~F,对应的ASCII码表

DB "012345678"

DB "9ABCDEF"

end

其它单片机跟C51查表类似.下面介绍松翰的单片机的查表程序.松翰单片机查表是通过X.Y寄存器来达到指向的表的目的如下

b0mov z,#segtab$L

b0mov y,#segtab$M

b0mov a,freqh ;led 3

add z,a

b0bts0 fc

incms y;表加1

nop

movc

.................

segtab:

dw 000ch

dw 000ah

dw 000ch ;0

dw 000ch

dw 0000h

dw 0000h ;1

dw 0008h

dw 000eh

dw 0004h ;2 ......................

希望看了此文之后.大家对查表的一个清楚认识

C51单片机C语言程序100例_Keil

目录 目录 (1) 函数的使用和熟悉********************************/ (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (16) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0口8位LED流水点亮 (20) 实例29:用P0、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (23) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 1/192

单片机汇编语言查表实例

下面是汇编语言实现楼宇对讲功能的查表实例: 当单片机外部系统发来不同的指令时,便启动查表功能,实现不同的操作,如单片机接收到的指令保存在RXD中,RXD+1保存指令终止符号,如要实现某个操作,外部发来0XA0操作符到RXD中,0XFF到RXD+1中,即开启查表,开始执行下列程序: MOV A,(RXD_Buf+1) CJNE A,RXD_Buf,Exit_Receive_Msg_Proc如果为退出指令,则退出 MOV B,RXD_Buf JmpX_By_Ins Division_Instruction,Run_Instr_Addr子程序 ;================================== Division_Instruction: DB00H,01H,03H,05H,06H,07H,09H,0AH,13H,14H,15H,16H DB28H,29H,2AH,2CH,2EH,30H,31H,33H,35H,FAH;FLAG OF END ;================================== Run_Instr_Addr: LJMP Call_By_Manger;00H; LJMP Put_Down_Hook;01H; LJMP Put_Off_Hook;03H; LJMP Disable_Calling;05H; LJMP Enable_Get_Msg;06H; LJMP There_Are_Msg;07H; LJMP Call_By_Door;09H; LJMP FeedBack_Alarm;0AH LJMP Put_Off_Hook_For_Out;13H; LJMP Set_Up_Fortify_By_GLC;14H; LJMP Disable_Alarm_By_GLC;15H; LJMP Reset_Divi_Password;16H; LJMP Calling_By_T_Main;28H; LJMP Hook_On_By_Brother;29H; LJMP Hook_Off_By_Brother;2AH; LJMP Hook_On_By_T_Main;2CH; LJMP Calling_By_Brother;2EH; LJMP Define_Baud_Rate;30H LJMP GLC_Proced_Alarm;31H LJMP Graphic_Msg_In_Main;33H LJMP Rst_Standart_Rate;35H Return_Main_Body_For_Divi_Ins: LJMP Exit_Receive_Msg_Proc;FAH JmpX_By_Ins MACRO I_Table,F_Table MOV DPTR,#I_Table将指令表首地址赋给DPTR LCALL DPTR_Comp_B调用 MOV A,R05此时R05表示查找到的位置 MOV B,#03LJMP指令占三个字节 MUL AB

51单片机指令表汇总

51单片机指令表 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器内容传送到累加器 1 1 MOV A,direct 直接地址内容传送到累加器 2 1 MOV A,@Ri 间接RAM内容传送到累加器 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器内容传送到寄存器 1 1 MOV Rn,direct 直接地址内容传送到寄存器 2 2 MOV Rn,#data 立即数传送到寄存器 2 1 MOV direct,Rn 寄存器内容传送到直接地址 2 2 MOV direct,direct 直接地址传内容传送到直接地址 3 2 MOV direct,A 累加器内容传送到直接地址 2 1 MOV direct,@Ri 间接RAM内容传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 累加器内容传送到间接RAM 1 1 MOV @Ri,direct 直接地址内容传送到间接RAM 2 2 MOV @Ri,#data 立即数传送到间接RAM 2 1 MOV DPTR,#data16 16 位地址传送到数据指针 3 2 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8位地址)内容传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16位地址)内容传送到累加器 1 2 MOVX @Ri,A 累加器内容传送到外部RAM(8位地址) 1 2 MOVX @DPTR,A 累加器内容传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址内容压入堆栈 2 2 POP direct 堆栈内容弹出到直接地址 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1

51单片机汇编指令速查表

51单片机汇编指令速查表 指令格式功能简述字节数周期 一、数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,@Ri 内部RAM单元送累加器 1 1 MOV @Ri ,A 累加器送内部RAM单元 1 1 MOV A ,#data 立即数送累加器 2 1 MOV A ,direct 直接寻址单元送累加器 2 1 MOV direct ,A 累加器送直接寻址单元 2 1 MOV Rn,#data 立即数送寄存器 2 1 MOV direct ,#data 立即数送直接寻址单元 3 2 MOV @Ri ,#data 立即数送内部RAM单元 2 1 MOV direct ,Rn 寄存器送直接寻址单元 2 2 MOV Rn ,direct 直接寻址单元送寄存器 2 2 MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2 MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换 1 1 XCH A ,@Ri 累加器与内部RAM单元交换 1 1 XCHD A ,direct 累加器与直接寻址单元交换 2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换 1 1 SWAP A 累加器高4位与低4位交换 1 1 POP direct 栈顶弹出指令直接寻址单元 2 2 PUSH direct 直接寻址单元压入栈顶 2 2 二、算术运算类指令 ADD A, Rn 累加器加寄存器 1 1

51单片机课程设计

课程设计说明书
课程设计名称






学生姓名
指导教师
单片机原理及应用课程设计 电子信息工程 140405 20141329 李延琦 胡黄水
2016 年 12 月 26 日

课程设计任务书
课程设计 题目
酒精测试仪
起止日期
2016 年 12 月 26 日— 2017 年 1 月 6 日
设计地点
计算机科学与工程学 院单片机实验室 3409
设计任务及日程安排: 设计任务:分两部分: (一)、设计实现类:进行软、硬件设计,并上机编程、联线、调试、 实现; 1.电子钟的设计 2.交通灯的设计 3.温度计的设计 4.点阵显示 5.电机调速 6.电子音乐发声(自己选曲) 7.键盘液晶显示系统 (二)、应用系统设计类:不须上机,查资料完成软、硬件设计画图。 查资料选定题目。 说明:第 1--7 题任选其二即可。(二)里题目自拟。 日程安排: 本次设计共二周时间,日程安排如下: 第 1 天:查阅资料,确定题目。 第 2--4 天:进实验室做实验,连接硬件并编写程序作相关的模块实验。 第 5--7 天:编写程序,并调试通过。观察及总结硬件实验现象和结果。 第 8--9 天:整理资料,撰写课程设计报告,准备答辩。 第 10 天:上交课程设计报告,答辩。 设计报告要求:
1. 设计报告里有两个内容,自选题目内容+附录(实验内容),每 位同学独立完成。 2. 自选题目不须上机实现,要求能正确完成硬件电路和软件程序 设计。内容包括: 1) 设计题目、任务与要求 2)硬件框图与电路图 3) 软件及流程图 (a)主要模块流程图 (b)源程序清单与注释 4) 总结 5) 参考资料 6)附录 实验上机调试内容
注:此任务书由指导教师在课程设计前填写,发给学生做为本门课程设计 的依据。

单片机指令表(最全)

单片机指令以A开头的指令有18条,分别为: 1、ACALL addr11 指令名称:绝对调用指令 指令代码:A10 A9 A8 10001 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。操作内容: PC←(PC)+2SP←(SP)+1 (SP)←(PC)7~0 SP←(SP)+1 (SP)←(PC)15~8 PC10~0←addrl0~0 字节数: 2 机器周期:2 使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。 2、ADD A,Rn 指令名称:寄存器加法指令指令代码:28H~2FH 指令功能:累加器内容与寄存器内容相加 操作内容:A←(A)+(Rn),n=0~7 字节数: 1 机器周期;1 影响标志位:C,AC,OV 3、ADD A,direct 指令名称:直接寻址加法指令指令代码:25H 指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 4、ADD A,@Ri ’ 指令名称:间接寻址加法指令指令代码:26H~27H 指令功能:累加器内容与内部RAM低128单元内容相加 操作内容:A←(A)+((Ri)),i=0,1 字节数: 1 机器周期:1 影响标志位:C,AC,OV 5、ADD A,#data 指令名称:立即数加法指令指令代码:24H 指令功能:累加器内容与立即数相加 操作内容:A←(A)+data 字节数: 2 机器周期:1 影响标志位:C,AC,OV 6、ADDC A,Rn 指令名称:寄存器带进位加法指令指令代码:38H~3FH 指令功能:累加器内容、寄存器内容和进位位相加 操作内容:A←(A)+(Rn)+(C),n=0~7 影响标志位:C,AC,OV 7、ADDC A,direct 指令名称:直接寻址带进位加法指令指令代码:35H 指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加 操作内容:A←(A)+(direct)+(C) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 8、ADDC A,@Ri 指令名称:间接寻址带进位加法指令指令代码:36H~37H 指令功能:累加器内容, 内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C),i=0,1 字节数: 1 机器周期:1 影响标志位:C,AC,OV 9、ADDC A,#data 指令名称:立即数带进位加法指令指令代码:34H 指令功能:累加器内容、立即数及进位位相加 操作内容:A←(A)+data+(C) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 10、AJMP addr11 指令名称:绝对转移指令 指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,实现程序转移。其方法是以指令提供的11位地址,取代PC的低11位,.而PC的高5位保持不变。操作内容:PC←(PC)+2PCl0~0←addrll 字节数: 2 机器周期:2 使用说明:由于addrll的最小值是000H,最大值是7FFH,因此地址转移范围是2KB。 11、ANL A,Rn 指令名称:寄存器逻辑与指令指令代码:58H~5FH 指令功能:累加器内容逻辑与寄存器内容 操作内容:A←(A)∧(Rn),n=0~7 字节数: 1 机器周期:1 12、ANL A,direct 指令名称:直接寻址逻辑与指令指令代码:55H 指令功能:累加器内容逻辑与内部RAM低128单元或专用寄存器内容 操作内容:A←(A)

单片机C语言编程实例

单片机C语言编程实例 前言 INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着 单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的 多种芯片,从而扩充和扩展了其品种和应用领域。 C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。将C语言向单片机上的移植,始于20世纪80年代的中后期。经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的。. C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广.最多的计算语言之一。C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言.与汇编语言相比,C51在功能上.结构上以及可读性.可移植性.可维护性等方面都有非常明显的优势。目前 最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51。第 一章单片机C语言入门 1.1建立您的第一个C项目 使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码, 这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软 件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑, 编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面 和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真 方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周 立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个

51单片机控制LED灯程序设计

51单片机:LED灯亮灯灭程序设计 1.功能说明:控制单片机P1端口输出,使P1.0位所接的LED点亮,其他7只灯熄灭。 程序: 01: MOV A , #11111110B ; 存入欲显示灯的位置数据 02: MOV P1,A ; 点亮第一只灯 03: JMP $ ; 保持当前的输出状态 04: END ; 程序结束 2.功能说明:单片机P1端口接8只LED,点亮第1、3、4、6、7、8只灯。 程序:

01:START: MOV A , #00010010B ; 存入欲显示灯的位置数据 02:MOV P1,A ; 点亮灯 03:JMP START ; 重新设定显示值 04:END ; 程序结束 3.功能说明:单片机P1端口接8只LED,每次点亮一只,向左移动点亮,重复循环。 程序: 01:START: MOV R0, #8 ;设左移8次 02:MOV A, #11111110B ;存入开始点亮灯位置

03:LOOP: MOV P1, A ;传送到P1并输出 04:RL A ;左移一位 05:DJNZ R0, LOOP ;判断移动次数 06:JMP START ;重新设定显示值 07:END ;程序结束 4.功能说明:单片机P1端口接8只LED,每次点亮一只,向右移动点亮,重复循环。 程序: 01:START: MOV R0, #8 ;设右移8次

02:MOV A, #01111111B ;存入开始点亮灯位置03: LOOP: MOV P1, A ;传送到P1并输出 04: ACALL DELAY ;调延时子程序05: RR A ;右移一位 06: DJNZ R0, LOOP ;判断移动次数07: JMP START ;重新设定显示值08: DELAY: MOV R5,#50 ; 09:DLY1: MOV R6,#100 ; 10: DLY2: MOV R7,#100 ;

51单片机指令表

此表主要是为了方便大家查阅每条指令的作用,写法以及字节数和周期数,建议大家保存为书签。 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2 MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1

单片机c语言编程控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。那个单片机究竟有什么 功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^) 我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机 上接上最少的外围电路元件让单片机工作。一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。 #include //头文件定义。或用#include其具体的区别在于:后者定义了更多的地址空间。 //在Keil安装文件夹中,找到相应的文件,比较一下便知! sbit P1_0 = P1 ^ 0; //定义管脚 void main (void) { while(1) { P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效 } } 就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。因为我们把LED的正通过电阻接至VCC。 P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。那么这样就能达到了我们预先的要求了。 while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。如果我们要试着点亮其他的LED,也类似上述语句。这里就不再讲了。 点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其 实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。假设我们有8个LED分别接在P1口的8个引脚上。硬件连接,在 P1_1--P1_7上再接7个LED即可。例程如下: #include sbit P1_0 = P1 ^ 0; sbit P1_1 = P1 ^ 1; sbit P1_2 = P1 ^ 2; sbit P1_3 = P1 ^ 3; sbit P1_4 = P1 ^ 4; sbit P1_5 = P1 ^ 5; sbit P1_6 = P1 ^ 6; sbit P1_7 = P1 ^ 7; void Delay(unsigned char a) { unsigned char i; while( --a != 0) {

单片机指令大全

一、数据传输指令 ─────────────────────────── ──────────── 在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVX 调用片外数据 MOVC调用片内数据. PUSH 把字压入堆栈. POP 把字弹出堆栈. SWAP 交换8位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) XLAT 字节查表转换. 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器) 输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时, 其范围是0-65535. 二、算术运算指令 ─────────────────────────── ──────────── ADD 加法. ADC 带进位加法. INC 加1. DAA 加法的十进制调整. SUB 减法. SBB 带借位减法. DEC 减1. NEC 求反(以0 减之). CMP 比较.(两操作数作减法,仅修改标志位,不回送结果). AAS 减法的ASCII码调整. DAS 减法的十进制调整. MUL 无符号乘法. IMUL 整数乘法. 以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), DIV 无符号除法. IDIV 整数除法. 三、逻辑运算指令 ─────────────────────────── ──────────── AND 与运算. or 或运算. XOR 异或运算. NOT 取反. ROL 循环左移. ROR 循环右移. RCL 通过进位的循环左移. RCR 通过进位的循环右移. 以上四种移位指令,其移位次数可达255次. 五、程序转移指令 ─────────────────────────────────────── 1>无条件转移指令(长转移) JMP 无条件转移指令 CALL 过程调用 RET/RETF过程返回. 2>条件转移指令(短转移,-128到+127的距离内) ( 当且仅当(SF XOR OF)=1时,OP1循环控制指令(短转移) LOOP CX不为零时循环. 4>中断指令 INT 中断指令 INTO 溢出中断 IRET 中断返回 5>处理器控制指令 NOP 空操作. 六、伪指令 END 程序结束.

单片机指令表(最全)

. ;.. 单片机指令以A 开头的指令有18条,分别为: 1、ACALL addr11 指令名称:绝对调用指令 指令代码:A10 A9 A8 10001 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址(al0~a0),取代PC 的低11位,PC 的高5位不变。 操作内容: PC←(PC)+2 SP←(SP)+1 (SP)←(PC)7~0 SP←(SP)+1 (SP)←(PC)15~8 PC10~0←addrl0~0 字节数: 2 机器周期:2 使用说明:由于指令只给出子程序入口地址的低11位,因此调用 范围是2KB 。 2、ADD A ,Rn 指令名称:寄存器加法指令 指令代码:28H ~2FH 指令功能:累加器内容与寄存器内容相加 操作内容:A←(A)+(Rn), n =0~7 字节数: 1 机器周期;1 影响标志位:C ,AC ,OV 3、ADD A ,direct 指令名称:直接寻址加法指令 指令代码:25H 指令功能:累加器内容与内部RAM 单元或专用寄存器内容相加 操作内容:A←(A)+(direct) 字节数: 2 机器周期:1 影响标志位:C ,AC ,OV 4、ADD A ,@Ri ’ 指令名称:间接寻址加法指令 指令代码:26H ~27H 指令功能:累加器内容与内部RAM 低128单元内容相加 操作内容:A←(A)+((Ri)), i =0,1 字节数: 1 机器周期:1 影响标志位:C ,AC ,OV 5、ADD A ,#data 指令名称:立即数加法指令 指令代码:24H 指令功能:累加器内容与立即数相加 操作内容:A←(A)+data 字节数: 2 机器周期:1 影响标志位:C ,AC ,OV 6、ADDC A ,Rn 指令名称:寄存器带进位加法指令 指令代码:38H ~3FH 指令功能:累加器内容、寄存器内容和进位位相加 操作内容:A←(A)+(Rn)+(C), n =0~7 字节数: 1 机器周期:1 影响标志位:C ,AC ,OV 7、ADDC A ,direct 指令名称:直接寻址带进位加法指令 指令代码:35H 指令功能:累加器内容、内部RAM 低128单元或专用寄存器内 容与进位位加 操作内容:A←(A)+(direct)+(C) 字节数: 2 机器周期:1 影响标志位:C ,AC ,OV 8、ADDC A ,@Ri 指令名称:间接寻址带进位加法指令 指令代码:36H ~37H 指令功能:累加器内容, 内部RAM 低128单元内容及进位位相加 操作内容:A←(A)+((Ri))+(C), i =0,1 字节数: 1 机器周期:1 影响标志位:C ,AC ,OV 9、ADDC A ,#data 指令名称:立即数带进位加法指令 指令代码:34H 指令功能:累加器内容、立即数及进位位相加 操作内容:A←(A)+data+(C) 字节数: 2 机器周期:1 影响标志位:C ,AC ,OV 10、AJMP addr11 指令名称:绝对转移指令 指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,实现程序转移。其方法是以指令提供的11位地址,取代PC 的低11位,.而PC 的高5位保持不变。 操作内容:PC←(PC)+2 PCl0~0←addrll 字节数: 2 机器周期:2 使用说明:由于addrll 的最小值是000H ,最大值是7FFH ,因此地址转移范围是2KB 。 11、ANL A ,Rn 指令名称:寄存器逻辑与指令 指令代码:58H ~5FH 指令功能:累加器内容逻辑与寄存器内容 操作内容:A←(A)∧(Rn), n =0~7 字节数: 1 机器周期:1 12、ANL A ,direct 指令名称:直接寻址逻辑与指令 指令代码:55H 指令功能:累加器内容逻辑与内部RAM 低128单元或专用寄存 器内容 操作内容:A←(A)∧(diret) 字节数: 2 机器周期:1

51单片机C语言程序设计复习资料

2013-2014学年上期51单片机C语言程序设计重修复习提纲考试方式:闭卷考试。 考试题型: 填空题(每空1分,共18分);单项选择题(每空2分,共18分);问答及计算题(每题4分,共16分);编程及程序阅读题(5小题,共48分)。 考试分数: 卷面成绩70%+平时成绩15%+实验成绩15%,未缺席、无课堂违纪、作业全交且认真完成的同学平时成绩可获得满分,缺席一次平时成绩扣30分,实验好评次数3次以上且实验报告全优的同学实验成绩可得满分,实验缺席一次扣30分。缺席实验和旷课共3次以上者,无考试资格。 考试时间: 18周周一(12月30日)下午14:00:16:00,考试地点:具体考室另行通知希望大家认真复习,认真听讲,不懂就问,考试成绩不及格允许查卷,如查卷卷面批阅无误成绩不做更改。 编程题为实验或实验类似的题目有3题,其余2题也取自课堂讲授例题,请务必认真复习。第一章单片机概述及单片机知识回顾 掌握什么是单片机、单片机的应用、常见单片机类型、十进制、十六进制、二进制数制转换知识。掌握单片机的硬件组成、CPU的结构、程序计数器PC的功能、存储器结构、机器周期的计算、会画出单片机的最小系统电路图及回答单片机最小系统的组成。 第二章C51语言程序设计基础(本章填空题和选择题比重较大请务必认真复习)掌握C51语言进行软件开发与汇编语言相比的优点、掌握C51的数据类型、特殊功能位的定义、C51的基本运算(位运算重点复习)、数组的定义、C51的结构及函数。 第三章AT89S51片内并行端口及编程(本章有编程题) 掌握P0-P3并行端口的特点,会开关量检测及流水灯程序的编程。 第四章AT89S51单片机的中断系统(本章有编程题) 掌握中断系统的结构、中断请求响应被满足的条件、外部中断的触发选择方式、外部中断的使用与编程。 第五章AT89S51单片机的定时器/计数器(本章有编程器) 掌握定时器的结构,TOMD及TCON的使用,定时器方式0和方式1的特点、会计算定时器初值,会用定时器中断产生PWM波形,会用定时器对外部事件进行计数。 第六章AT89S51单片机的串行口(本章有计算题) 掌握串行通信的基础知识(课本没有的内容请参照课堂讲授笔记或PPT)、串行口的四种工作方式的特点、会计算奇偶校验码、会根据波特率计算T1的初值。 第七章AT89S51单片机与输入/输出外设接口(本章有编程题) 掌握数码管动态显示的原理、掌握矩阵式键盘的原理与编程(矩阵键盘编程必考,但不会考4X4键盘)。 第八章AT89S51单片机与D/A与A/D转换器的接口(本章有编程题) 掌握AD与DA转换的接口、ADC和DAC的技术指标、常用AD和DA转换器。掌握ADC0809和TLC2543的使用与编程(2器件其中之一有编程题)。 第九章AT89S51单片机应用系统与调试(本章有编程题) 掌握单片机应用系统的软件抗干扰方法。

单片机汇编语言指令查表

目录 表1 寻址方式与相应的寻址空间 (2) 1.1数据传送指令MOV (2) 1.2程序存储器取数据指令MOVX,MOVC (3) 1.3 数据交换指令XCH,XCHD,SWAP (3) 1.4 逻辑运算指令ANL,ORL(按位进行) (4) 续表1.4 逻辑运算指令XRL CLR CPL RL RLC RR RRC(按位进行) (5) 1.5 控制转移指令LJMP AJMP SJMP JMP JZ JNZ CJNE (6) 续表1.5 控制转移指令DJNZ LCALL ACALL RET RETI NOP (7) 1.6 布尔处理(位操作)指令CLR SETB CPL ANL ORL (8) 续表1.6 布尔处理(位操作)指令JC JNC JB JNB JBC (9) 1.7堆栈操作指令PUSH POP (10) 2.MCS-51系列单片机算术运算指令表ADD ADDC SUBB INC DEC MUL DIV DA (10)

表1 寻址方式与相应的寻址空间 1.1数据传送指令MOV 方式 利用的变量 使用的空间 寄存器 R0∽R7,A ,B ,CY ,DPTR 直接寻址 direct 片内RAM 低128字节特殊功能寄存器SFR 寄存器间址 @Ro ,@R1 SP @R0,@R1,@DPTR 片内RAM 片外RAM 立即数 #data 程序存储器 基址加变址 @A+PC @A+DPTR 程序存储器 相对寻址 PC+rel 程序存储器 位寻址 bit 片内RAM 的20H ∽2FH 部分SFR 目的操作数 汇编指令 机器码 功能 字节数 机器 周期 A 累加器 立即数送A MOV A ,#data 74H data data 传至A 2 1 内部RAM 或SFR 内容送A MOV A ,direct E5H direct (direct)传至A 2 1 寄存器内容送A MOV A ,Rn (n=0∽7) E8H ∽EFH 11101rrr (Rn)传至A 1 1 内部RAM 内容送A MOV A ,@Ri (i=0,1) 1110011i ((Ri))传至A 1 1 Direct 内部RAM 或SFR 立即数送内部RAM 或SFR MOV direct ,#data 75H direct data data 传至direct 3 2 内部RAM 和SFR 直接直接传送 MOV direct ,direct 85H direct direct (direct)传至direct 3 2 累加器内容送内部RAM 或SFR MOV direct ,A F5H direct (A)传至direct 2 1 寄存器内容送内部RAM 或SFR MOV direct ,Rn (n=0∽7) 10001rrr direct (Rn)传至direct 2 2 内部RAM 内容送内部RAM 或SFR MOV direct ,@Ri (i=0,1) 1000011i direct ((Ri))传至direct 2 2 Rn 寄存器 立即数送寄存器 MOV Rn,#data (n=0∽7) 01111rrr data data 传至Rn 2 1 内部RAM 或SFR 内容送寄存器 MOV Rn,direct (n=0∽7) 10101rrr direct (direct)传至Rn 2 2 累加器内容送寄存器 MOV Rn,A (n=0∽7) 11111rrr (A)传至Rn 1 2 @Ri 内部RAM 立即数送内部RAM MOV @Ri,#data (i=0,1) 0111011i data data 传至(Ri) 2 1 内部RAM 或SFR 内容送内部RAM MOV @Ri,direct (i=0,1) 1010011i direct (direct)传至(Ri) 2 2 累加器内容送内部RAM MOV @Ri,A (i=0,1) 1111011i (A)传至(Ri) 1 1 DPTR 16位立即数传送指令 MOV DPTR,#data16 90H dataH dataL data16传至DPTR 3 2

MCS-51系列单片机指令表

MCS-51系列单片机指令A表 MCS-51系列单片机指令以A开头的指令有18条,分别为: 1、ACALL addr11 指令名称:绝对调用指令 指令代码: 指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址(al0~a0), 取代PC的低11位,PC的高5位不变。 操作内容: PC←(PC)+2 SP←(SP)+1 (SP)←(PC)7~0 SP←(SP)+1 (SP)←(PC)15~8 PC10~0←addr l0~0 字节数: 2 机器周期:2

使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。 2、ADD A,Rn 指令名称:寄存器加法指令 指令代码:28H~2FH 指令功能:累加器内容与寄存器内容相加 操作内容:A←(A)+(Rn), n=0~7 字节数: 1 机器周期;1 影响标志位:C,AC,OV 3、ADD A,direct 指令名称:直接寻址加法指令 指令代码:25H 指令功能:累加器内容与内部RAM单元或专用寄存器内容相加 操作内容:A←(A)+(direct) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 4、ADD A,@Ri ’ 指令名称:间接寻址加法指令 指令代码:26H~27H 指令功能:累加器内容与内部RAM低128单元内容相加 操作内容:A←(A)+((Ri)), i=0,1 字节数: 1 机器周期:1

5、ADD A,#data 指令名称:立即数加法指令 指令代码:24H 指令功能:累加器内容与立即数相加 操作内容:A←(A)+data 字节数: 2 机器周期:1 影响标志位:C,AC,OV 6、ADDC A,Rn 指令名称:寄存器带进位加法指令 指令代码:38H~3FH 指令功能:累加器内容、寄存器内容和进位位相加 操作内容:A←(A)+(Rn)+(C), n=0~7 字节数: 1 机器周期:1 影响标志位:C,AC,OV 7、ADDC A,direct 指令名称:直接寻址带进位加法指令 指令代码:35H 指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C) 字节数: 2 机器周期:1

单片机指令功能一览表

单片机指令功能一览表 助记符代码说明 MOV A,Rn E8~EF 寄存器A MOV A,direct E5 dircet 直接字节送A MOV A,@Ri ER~E7 间接RAM送A MOV A,#data 74 data 立即数送A MOV Rn,A F8~FF A送寄存器 MOV Rn,dircet A8~AF dircet 直接字节送寄存器 MOV Rn,#data 78~7F data 立即数送寄存器 MOV dircet,A F5 dircet A送直接字节 MOV dircet,Rn 88~8F dircet 寄存器送直接字节 MOV dircet1,dircet2 85 dircet1 dircet2 直接字节送直接字节 MOV dircet,@Ro 86~87 间接RAM送直接字节 MOV dircet,#data 75 dircet data 立即数送直接字节 MOV @Ri,A F6~F7 A送间接RAM MOV @Ri,#data 76~77 data 直接字节送间接RAM MOV @Ri,#data 76~77 data 立即数送间接RAM MOV DPTR,#data16 90 data 15~8 16位常数送数据指针 data7~0 MOVC A,@A+DPTR 93 由((A)+(DPTR))寻址的程序存贮 器字节选A MOVC A,@A+PC 83 由((A)+(PC));寻址的程序存贮器字节送A MOVX A,@Ri E2~E3 送外部数据(8位地址)送A MOVX A,@DPTR E0 送外部数据(16位地址)送A MOVX @Ri,A F2~F3 A送外部数据(8位地址) MOVX @DPTR,A F0 A送外部数据(16位地址) PUSH dircet C0 dircet 直接字节进栈,SP加1 POP dircet D0 dircet 直接字节退栈,SP减1 XCH A,Rn C8~CF 交换A和寄存器 XCH A,dircet C5 dircet 交换A和直接字节 XCH A,@Ri C6~C7 交换A和间接RAM XCH A,@Ri D6~D7 交换A和间接RAM的低位 SWAP A C4 算术操作(A的二个半字节交换) ADD A,Rn 28~2F 寄存器加到A ADD A,dircet 25 dircet 直接字节加到A ADD A,@Ri 26~27 间接RAM加到A ADD A,#data 24data 立即数加到A ADD A,Rn 38~3F 寄存器和进位位加到A ADD A,dircet 35dircet 直接字节和进位位加到A ADD A,@Ri 36~37 间接字节和进位位加到A ADD A,data 34 data 立即数和进位位加到A

相关主题
文本预览
相关文档 最新文档