STC15F2K60S2单片机复习

这篇文章详细介绍了8051单片机汇编语言中的基本指令,如逻辑操作、寻址方式、算术运算、程序转移、中断处理以及串行口通信等,并讨论了单片机编程的关键概念和技术,包括程序存储器操作、数据类型和中断服务过程等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考复习

CPL 取反~ 🌟CPL取反,CLR清零

CLR 清零

SETB 置位为1

RL 左移一位

ANL 相与&

INC 加一

ORL 或

XRL 逻辑异或,异或的操作是:相同取0,相反取1

🌟
RL:左移一位

RLC :左移一位同时CY左移一位

CPL P1.3 对第三位取反

JBC 为1跳转

程序存储器只读不写!MOVC

XCHD 指的是低四位交换

SWAP 是高低四位自交换

程序转移指令:

无条件转移和有条件转移

JZ A=0的时候转移

DJNZ 减一不为0转移

判断位转移

JB bit

JNB bit

JBC bit
🌟
子程序返回RET和中断返回RETI

RET指令作为子程序的最后一条指令,按调用时保存的地址返回,

RETI作为中断程序的最后一条,除了按照中断保存的地址之外还要清除相应的中断寄存器
指令,关键点在于最后一条和谁是谁。

算数指令

INC DEC

寻址方式总结:

立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,基地址+变地址寻址

🌟 高128字节采用寄存器间接寻址方式!!!,特殊功能寄存器采用
直接寻址

所有加减都有近位位的计算

例子

MOV A,#36H ;0011 0110

MOV R0,#9FH ;1001 1111

ANL A,R0; A=0001 0110=16H

SETB C; C=1;

ADDC A,RO; 0001 0110 + 1 + 1001 1111=> A=B6H

JNZ REL 为两字节指令 从1308H->134AH 求相对偏移量REL

134AH=1308H+02H+REL =>REL=40H

目的地址=(PC)+2+REL

DA A才对 必须是单个操作符

DA感觉会考🌟

对低四位加0110调整,注意进位位CY=1,当高四位有进位的时候

CLR C ;C=0;
ADDC A,#60H;0010 0101 +0110 0000->1010 0110 =C6H,CY=1;
MOV 20H,@R0;(20H)=33H;
ADDC A,20H;A+33H+CY=>FAH;
MOV 33H,A;=>(33H)=FAH;

扩展RAM2010H的内容送扩展RAM2020H

ORG 0000H;
MOV DPTR  #2010H;
MOVX A @DPTR;
MOV DPTR #2020H;
MOVX @DPTR A;
END

MOVC 采用基地址+变地址方法!

将程序存储器数据2010H送入累加器A中

ORG 2000H;
MOV DPTR ,#2000H;
MOV A ,#10H;
MOVC A ,@A+DPTR

列竖式运算:

ORG 0000H;
LJMP START;
ORG 1000H;

START:
CLR C;清零操作
MOV A,30H;
SUBB A,40H;
MOV 30H,A;
MOV A,31H;
SUBB A,41H;
MOV 31H,A; 存放结果先低位再高位
SJMP $;
END;

程序设计段

转换为ASCII

ORG 1000H
ADDR DATA 0040H;
ADDR2 EQU 60H;
MOV DPTR ,#ADDR1;
MOV R0,#ADDR2;
MOV @R0,#00H;
MOVX A,@DPTR;
MOV R7,A;
ANL A ,#0FH;
CLR C;
ADDC A,#30H;
MOV @R0,A;
INC R0;

分段函数
变量x作为补码形式存放进30H

ORG  1000H;
START:
MOV A,30H ;先将变量存入A中
JZ NEXT; 如果x=0;转移,NEXT作为标号
ANL A,#80H;通过判断最高位来判断正负
JZ ED;  如果x>0;转移
MOV A,#05H;否则不转移
ADD A,30H;
MOV 30H,A;
SJMP ED; 处理结束,跳出循环
NEXT:
   MOV 30H,#20H
ED:
  SJMP $;

循环问题,循环减一加一,送出数据

MOV R7,#16
MOV DPTR,#1000H;
MOV R0,#20H;
NRXT:
   MOVX A,@DPTR;
   MOV @RO,A;
   INC RO;
   INC DPTR;
DJNZ R7,NEXT
SJMP $;

DB存储字节

DW存储字

DS存储空间

外部中断0控制位:P3.2

外部中断1控制位:P3.3

CPU面向I/O的服务有:查询,中断,DMA

串行口中断包含串行发送和串行接收两种,不会自动清零

定时器/计数器:

设计流水灯,时间间隔500ms,程序:

ORG 0000H
LJMP MAIN
ORG 001BH
LJMP TIMER_ISR

MAIN:
   MOV R3,#10;
   MOV TOMD,#00H;
   MOV TH1,#3CH;
   MOV TL1,#0B0H;
   MOV R2,#07H;
   MOV P1,#0FEH;
   MOV A,#0FEH;
   CLR 00H;
   SETB TR1;
   SJMP $;
TIMER_ISR:
   DJNZ R3,EXIT_ISR
   MOV R3,#10;
   JB 00H,RIGHT_SHIFT
   RL A;
   MOV P1,A;
   DJNZ R2 EXIT_ISR
   SETB 00H;
   MOV R2,07H;
   SJMP EXIT_ISR
RIGHT_SHIFT:
   RR A;
   MOV P1,A;
   DJNZ R2,Exit_T1_ISR;
	CLR 00H;
	MOV R2,#07H;
Exit_T1_ISR:
	RET1
	END

简述 STC15F2K60S2 单片机串行口 1 方式 2、方式3 的相同点与不同点。

(1) 相同点:字符帧格式是一样的。

(2) 不同点:波特率发生器不同。

双机通信时必须保持波特率一致。

微处理器与外部设备的数据传输方式:

查询方式,DMA(直接存储器访问模式:数据传输时无需CPU进行参与),中断方式

作业:中断处理的各个流程(图片)

嵌入式系统不止是单片机,主要分为嵌入式微处理器,嵌入式微控制器,嵌入式DSP

🌟AD转换的步骤:

1:打开ADC电源

2:设置延时等待ADC内部稳定

3:设置P1口中相应的口线作为模拟量输入通道

4:选择ADC通道,CHS2-CHS0

5:根据需要设置转换存储格式

6:启动AD转换

7:查询AD转换结束标志ADC_FLAG,完成则保存AD转换结果

8:若采用中断方式需要设置中断读取结果

P1ASF不能位寻址,1:ADC输入,0:IO口

35H:0011 0101

ADC_CONTR:

好看的壁纸

串行通信:

串行发送和串行接收,中断不会自动接收

异步通信-》波特率

波特率:每秒钟传送二进制数码的位数(bit/s=bps)

同步通信传输要求发送时钟和接收时钟必须严格保持同步

SCON-98H,可位寻址

REN 允许串行同行接收控制位,软件置为和清零

TI发送中断标志位,RI接收中断标志位

设置定时器程序:

MOV TMOD ,#00H;
MOV TL1,0F4H;
MOV TH1,0BH;
SETB TR1;

T0四种工作方式,T1三种工作方式,处于方式0时都是16位可重装初值的定时器计数器
C/T=0:定时 ,C/T=1:计数

独立式键盘,矩阵式键盘

编程扫描,定时扫描,中断扫描

单主单从
互为主从
一主多从

(1) 在任一磁盘下建立一个专门用于存放MCS-51单片机实验程序的文件夹,比如在D:盘中建立名为C51TEST的文件夹,在此文件夹中再新建一个名为LED_One_Flashing的文件夹,用来存放即将建立的工程及其相关的程序、编译文件。

(2) 启动Keil C51集成开发环境。从桌面上直接双击Keil C51图标 ,启动该软件。

(3) 建立工程文件LED_One_Flashing。在环境中,鼠标左键点击“Project”→“New Project”,出现“Create New Project”对话框。在“保存在”下拉列表框中选择工程的保存目录D:C51TEST LED_One_Flashing文件夹,然后在文件名文本框中输入工程名(如LED_One_Flashing),不需要扩展名,单击保存按钮。

单击保存按钮后,出现如图1-4所示的“Select Device for Target ‘Target 1’”对话框。根据自己的开发板上的单片机芯片,选取相应的CPU。本实验使用89C52芯片,在这里我们选取Atmel公司的AT89C52芯片,单击“Atmel”前面的“ ”号,展开该层,找到其中的“AT89C52”,然后单击确定,此时会弹出图1-5(如果没有弹出则不用管,直接进行下一步),此处是问你是否确定把标准8051启动代码复制到项目文件夹和添加到项目工程中,单击“是”,回到主界面。

(4) 编辑C语言源文件。在主界面里“File”→“New”或者点击工具栏中的 ,出现的文件编辑窗口,在该窗口编写源程序,编辑完程序点击图标保存该文件,保存到默认工程文件路径:D:C51TEST LED_One_Flashing文件夹中,在“文件名”编辑框内填写文件名如:LED_One_Flashing.c(注保存时扩展名必须为“.c”)。

(5) 将工程窗口中“Target 1”前面的“ ”号展开,在“Source Group 1”上单击鼠标右键打开快捷菜单。再单击“Add File to Group ‘Source Group 1’”选项,弹出的“Add File to Group ‘Source Group 1”对话框。直接选中D:C51TEST LED_One_Flashing文件夹中的LED_One_Flashing.c文件,然后点击“Add”。

点击“Add”后,将“Add File to Group ‘Source Group 1”对话框关闭,此时在左边文件夹“Source Group 1”前面会出现一个“ ”号,单击“ ”号展开后,会出现一个名为“LED_One_Flashing.c”的文件,说明新文件添加已完成。

(6) 配置工程属性。将鼠标移动到左边窗口的“Target 1”上,单击鼠标右键打开快捷菜单,再单击“Options for Target ‘Target 1’”选项,弹出的“Options for Target ‘Target 1’”对话框;也可以通过点击工具栏里的 进入“Options for Target ‘Target 1’”对话框。在此对话框内,先点击“Target”来到“Target”选项卡,然后在Xtal栏中配置晶振频率。由于本实验用的开发板的单片机的晶振为12M,故这里填12。

设置完“Target”选项卡后,再点击“Output”来到“Output”选项卡,勾“Create HEX File”选项,勾选此项是为了输出十六进制目标代码,此代码将被下载到单片机中脱机运行。

(7) 编译源文件得到目标代码文件(.HXE文件)。回到Keil C51的主界面,点击编译按钮(图1-13中的红色方框内的图标)编译源文件。如果源文件没有错误,则在存放项目和源代码文件夹内出现.HEX文件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值