首页 > 其他分享 >51存储器块清零和二进制数转换成二十进制(BCD)码

51存储器块清零和二进制数转换成二十进制(BCD)码

时间:2023-06-08 23:37:51浏览次数:53  
标签:main include BCD void 51 MOV 单片机 实验 清零


一、实验目的
1、了解单片机实验开发板电路原理图
2、掌握KEIL软件开发单片机C51程序的流程
3、掌握单片机开发程序的烧录方法和流程
二、实验内容
1、完成单片机开发相关必备软件的安装
2、学习单片机开发板套件的实验原理图
3、编写、下载及实现第一个单片机程序(点亮一个LED灯)
三、实验原理
单片机开发板原理图;单片机并行输入输出接口
四、实验电路与程序
1、软件实验一:存储器块清零
1)实验要求:指定存储器中某块的起始地址和长度,要求能将其内容清零。
2)实验目的:1. 掌握存储器读写方法;2. 了解存储器的块操作方法
3)实验说明:通过本实验,学生可以了解单片机读写存储器的读写方法,同时也可以了解单片机编程,调试方法。
4)程序框图

51存储器块清零和二进制数转换成二十进制(BCD)码_#include

5)程序源代码

汇编代码


ORG     0000H            ;程序执行的起始地址1. LJMP Main ;跳转到main函数
2. 
3. ORG 0100H ;程序跳转到0100H开始执行
4. 
5. Main: ;主函数
6. INIT: ;初始化存储块,把立即数写到内存块里面
7. MOV 30H, #1FH
8. MOV 31H, #2FH
9. MOV 32H, #3FH
10. MOV 33H, #4FH
11. MOV 34H, #5FH
12. MOV 35H, #6FH
13. 
14. 
15. MOV R0, #30H ;起始位置设置
16. MOV R1, #06H ;长度设置
17. 
18. CLS: MOV @ R0, #00H ;清零
19. INC R0 ;选择下一个清零地址
20. DJNZ R1, CLS ;循环直到这段长度的地址全部清零
21. 
22. 
23. SJMP Main ;跳转到main,死循环
24. END

C语言代码:

main.c
1. #include <reg51.h>
2. #include <stdio.h>
3. #include <cls.h>
4. int length=5;
5. char *start_addr=0x30;
6. int num=0x9F;
7. 
8. void main(void)
9. {

10. int i;
11. for(i=0;i<length;i++)//往地址里面写值
12. {

13. *start_addr=num;
14. start_addr++;
15. }
16. start_addr=start_addr-length;//回到初始地址
17. clear(start_addr,length);//清理指定位置的值
18. while(1)
19. {

20. ;//让单片机在死循环内跑,保持工作状态
21. }
22. 
23. }
cls.h
1. #ifndef _CLS_H
2. #define _CLS_H//设置条件编译,防止多处引用头文件造成连接错误
3. void clear(char* addr, int length);
4. #endif
 cls.cvoid clear(char* addr, int length)//起始地址和清零空间长度1. {

2. int i;
3. for(i=0;i<length;i++)
4. {

5. *addr =0;//该地址清零
6. addr++;
7. }
8. }

2、软件实验二:二进制数转换成二十进制(BCD)码

1)实验要求:将给定的一个二进制数,转换成二十进制(BCD)码。

2)实验目的:1. 掌握简单的数值转换算法; 2. 基本了解数值的各种表达方法

3)实验说明:计算机中的数值有各种表达方式,这是计算机的基础。掌握各种数制之间的转换是一种基本功。

4)程序框图

51存储器块清零和二进制数转换成二十进制(BCD)码_bc_02

5)程序源代码

汇编代码:

1. ORG 0000H ;程序执行的起始地址
2. LJMP Main ;跳转到main函数
3. 
4. ORG 0100H ;程序跳转到0100H开始执行
5. 
6. Main: ;主函数
7. MOV A, #9FH ;待转换的二进制数
8. 
9. MOV B, #100
10. D
1. IV AB ;除一百,取出百位在A,余数在B
2. MOV 30H, A ;存百位数在32H
3. MOV A, #10
4. XCH A, B ;A为除了一百之后的余数,B为10
5. DIV AB ;十位放在A,个位放在B
6. RLC A
7. RLC A
8. RLC A
9. RLC A ;四次左移指令,把十位移到高字节
10. ADD A, B ;把个位放到低字节
11. MOV 31H, A ;十位和个位放到31H
12. SJMP Main ;跳转到main,死循环
13. END
C语言代码:
main.c代码
1. #include <reg51.h>
2. #include <stdio.h>
3. #include <intrins.h>
4. #include <b2bcd.h>
5. char *high=0x30;//BCD码的百位存放地址
6. char *low=0x31;//BCD码的十位和各位存放地址,十位在高字节
7. 
8. void main(void)
9. {

10. char b=123;//待转换的BCD码
11. b2bcd(high,low,b);
12. while(1)
13. {

14. ;//让单片机在死循环内跑,保持工作状态
15. }
16. }
b2bcd.h代码
1. #ifndef _BSP_BUZZER_H
2. #define _BSP_BUZZER_H
3. #include “stm32f1xx.h”
4. void init_buzzer(void);
5. void beep_buzzer(void);
6. #endif
b2bcd.c代码
1. #include <b2bcd.h>
2. void b2bcd(char *high,char *low,char b)
3. {

4. char temp;
5. *high=b/100;//算百位,存百位
6. temp=(b%100)/10;//算十位
7. *low=temp;//存十位
8. temp=b-100*(high)-10temp;//算个位
9. *low=crol(*low,4)+temp;//十位移到高位,个位放低位
10. }

3、软件实验一:点亮LED灯

1)实验要求:控制P1口的八个LED灯依次亮起,成流水状,并完成proteus仿真。

2)实验目的:1. 掌握GPIO口控制方法;2. 掌握proteus和keil联合仿真方法;3.掌握利用宏晶的isp下载软件下载程序的方法。

3)实验说明:通过本实验,学生可以了解单片机控制GPIO的方法,proteus仿真和程序烧写。

4)程序流程图

51存储器块清零和二进制数转换成二十进制(BCD)码_#include_03

5)程序源代码
main.c

1. #include <reg52.h>
2. #include <stdio.h>
3. #include <intrins.h>
4. void delay_ms(unsigned int n)
5. {

unsigned int i=0,j=0;for(i=0;i<n;i++)for(j=0;j<123;j++);1. }
2. void main()
3. {

4. int i=0;
5. P1=0xFE;//LED接上拉电阻,故GPIO高低平时灯亮
6. while(1)
7. {

8. 
9. for(i=0;i<8;i++)
10. {

11. delay_ms(500);
12. P1=(P1<<1)|(P1>>7);//循环左移1位
13. }
14. }
15. 
16. }

6)proteus仿真图

51存储器块清零和二进制数转换成二十进制(BCD)码_#include_04

五、实验结果与总结
1.指定位置清零
现象:30H到35H地址被清零。

51存储器块清零和二进制数转换成二十进制(BCD)码_#include_05

心得
注意51单片机的存储形式是大端模式,而查找存储地址时要注意是c,d还是x。

2.二进制转BCD码

现象:二进制数被转化为BCD码存在30H和31H中。

51存储器块清零和二进制数转换成二十进制(BCD)码_#include_06

心得

注意地址传参;注意%和/的用法。

3.点亮LED灯:

现象:LED灯依次变绿

51存储器块清零和二进制数转换成二十进制(BCD)码_单片机_07

心得:注意P1口接的是上拉电阻,输出低电平时灯亮;延时时间需要长一些,否则看起来像是所有灯都亮。


标签:main,include,BCD,void,51,MOV,单片机,实验,清零
From: https://blog.51cto.com/u_16131692/6444164

相关文章

  • 51矩阵键盘数码管动态显示
    一、实验目的1、了解矩阵键盘扫描方法。2、了解数码管动态显示方法。二、实验内容1、完成读取矩阵键盘并静态显示。2、完成完成读取矩阵键盘并动态显示。三、实验原理四、实验电路与程序1、软件实验一:完成读取矩阵键盘并静态显示。1)实验要求:单片机完成读取矩阵键盘并通过八段......
  • 51串口proteus仿真实验
    一、实验目的1、了解单片机串口接收与发送方法。2、了解串口助手使用方法。3、了解数码管动态显示方法。4、了解单片机串口中断服务函数用法。二、实验内容1、完成单片机串口往电脑发送数据实验。2、完成电脑串口助手往单片机发送学号,并通过单片机串口完成学号回传,并利用数......
  • 51静态数码管实验
    一、实验目的1、了解数码管共阴极和共阳极接法。2、了解数码管的段选和位选方式。3、了解定时器初始化设置的方法。二、实验内容1、完成数码管显示数字每秒加一,八个数码管全亮;完成数码管八段全亮,八个数码管全亮。1)实验要求:完成数码管八段全亮,八个数码管全亮,以此检验数码管是......
  • 51按键外部中断控制流水灯
    实验二外部按键输入一、实验目的1、了解单片机检测口方法2、了解单片机外部中断原理3、了解按键输入原理二、实验内容1、完成按键扫描控制流水灯2、完成按键外部中断控制流水灯三、实验原理四、实验电路与程序1、软件实验一:按键扫描控制流水灯1)实验要求:读取四个按键的输......
  • 51定时器中断控制流水灯
    一、实验目的1、了解读取和清零定时器标志位的方法。2、了解定时器中断的方法。3、了解定时器初始化设置的方法。二、实验内容1、完成读取定时器溢出标志位来控制流水灯2、完成定时器中断服务函数控制流水灯三、实验原理只用一个定时器:定时器级联:四、实验电路与程序1、软......
  • Codeforces 1514 C
    1514C题意给出一个数n,求[1,2,3...n-1]的某个最长子序列,这个子序列的元素乘积模n余1。思路这是个思维题,一个数学公式\[x\equiv1(modn)\rightarrowkx\equivk(mod kn)\]所以子序列中的元素与\(n\)互质,累乘结果模\(n\)后如果不是1,那么将序列中等于结果的元素去......
  • Codeforces 1515 B
    1515B题意有n只袜子(n为偶数),但左袜子有L只,右袜子有R只,每只袜子的颜色为\(C_i\),可以进行以下操作:换袜子的方向、或者将袜子变色,问进行多少次操作后变成(n/2)对袜子思路很曲折,想了很久后终于想清楚,排除配对的袜子后,对于某类袜子\(i\),剩下\(c\geq2\)(假设剩下的是右边)只,它的配对......
  • ASEMI代理英飞凌TDK5100F射频模块的性能与应用分析
    编辑-Z本文将对TDK5100F射频模块进行详细的介绍与分析,包括其性能特点、应用领域、使用方法。通过对这三个方面的阐述,希望能够帮助读者更好地了解TDK5100F射频模块的优势和应用场景。 1、TDK5100F射频模块的性能特点TDK5100F射频模块是一款高性能的无线通信模块,具有以下几个显著的......
  • ASEMI代理英飞凌TDK5100F射频模块的性能与应用分析
    编辑-Z本文将对TDK5100F射频模块进行详细的介绍与分析,包括其性能特点、应用领域、使用方法。通过对这三个方面的阐述,希望能够帮助读者更好地了解TDK5100F射频模块的优势和应用场景。 1、TDK5100F射频模块的性能特点TDK5100F射频模块是一款高性能的无线通信模块,具有以下几个显......
  • [LeetCode] 1351. Count Negative Numbers in a Sorted Matrix
    Givena mxn matrix grid whichissortedinnon-increasingorderbothrow-wiseandcolumn-wise,return thenumberof negative numbersin grid.Example1:Input:grid=[[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]Output:8Explanation:Thereare......