单片机原理及应用实验报告

这篇博客详细记录了三个51单片机实验,包括使用Keil软件进行汇编和C语言程序设计。实验内容涉及数据传输、查找操作以及定时器和串口通信的程序设计,通过Keil软件进行编译、下载和仿真测试,验证了程序的正确性,为后续的单片机应用开发打下了基础。
摘要由CSDN通过智能技术生成

目录

实验一 51单片机仿真软件使用及汇编语言程序设计

一、实验目的

二、实验内容

1、编写汇编程序将片外RAM中1000H~101FH的内容传送到内部RAM的30H~4FH中。

 kimi:

3.5:

2、编写汇编程序,将内部RAM 30H为起始地址的数据块传送到外部RAM 1000H开始的连续区域,直到发现”$”字符为止。

3、编写汇编程序,查找内部RAM的30H-50H单元中是否有0AAH这一数据。若有,则将51H单元置为“01H”,若未找到,则将51H单元置为“00H”。

三、程序代码调试及结果

四、实验小结

实验二 51单片C语言程序设计

一、实验目的

二、实验内容

1、设内部数据存储器的20H、21H和22H、23H单元分别存放着两个无符号的16位数,试用C语言编程,将其中的大数置于24H、25H单元。

2、试用C语言编程,将外部数据存储器30H~45H单元的内容传送到内部数据存储器10H~25H单元。  

三、程序代码调试及结果

四、实验小结

实验三  51单片机定时器及串口通信程序设计

一、实验目的

二、实验内容

1、AT89C51单片机的晶体振荡器的频率为6MHz,要求使用T0方式2定时,在 P1.0引脚输出周期为400μs、占空比为9:1的矩形脉冲。要求使用T0中断。利用Keil4的波形分析功能观察P1.0的输出结果。

2、设AT89C51单片机晶体振荡器的频率为12MHz,编写串口发送程序,将内部RAM 50H~5FH的16个字节发送到另一单片机,波特率为4800b/s。通过Keil4的串口调试窗观察发送过程。

三、实验过程与结果

四、实验小结


实验一 51单片机仿真软件使用及汇编语言程序设计

一、实验目的

1、学习Keil软件的使用

2、掌握51单片机寻址方式及常用指令的使用

3、掌握51单片机汇编程序设计方法

二、实验内容

按要求完成下面问题的程序设计和调试:

1、编写汇编程序将片外RAM中1000H~101FH的内容传送到内部RAM的30H~4FH中。

 kimi:

ORG 0000H ; 程序起始地址

; 初始化相关寄存器
MOV DPTR, #1000H ; 设置外部RAM的起始地址
MOV R0, #30H ; 设置内部RAM的起始地址

MOV R7, #20 ; 设置循环计数,即要传输的数据量

COPY_LOOP: ; 循环标签

    CLR A ; 清除累加器A
    MOVC A, @A+DPTR ; 从外部RAM读取一个字节
    MOV @R0, A ; 将读取的数据存储到内部RAM
    INC DPTR ; 增加外部RAM地址指针
    INC R0 ; 增加内部RAM地址指针
    DJNZ R7, COPY_LOOP ; 减少循环计数并检查是否继续循环

; 程序结束,可以在这里添加停止或等待指令
SJMP END

END: ; 程序结束标签
    SJMP END ; 无限循环

END ; 程序实际结束

3.5:

ORG 0000H

    MOV DPTR, #1000H     ; 初始化外部RAM地址指针
    MOV R0, #30H         ; 初始化内部RAM地址指针

COPY_LOOP:
    MOVX A, @DPTR        ; 从外部RAM读取数据
    MOV @R0, A           ; 将数据写入内部RAM
    INC DPTR             ; 外部RAM地址加1
    INC R0               ; 内部RAM地址加1
    CJNE R0, #50H, COPY_LOOP  ; 继续拷贝直到结束位置

    ; 结束程序

2、编写汇编程序,将内部RAM 30H为起始地址的数据块传送到外部RAM 1000H开始的连续区域,直到发现”$”字符为止。

ORG 0000H

MOV DPTR, #30H       ; 初始化指针指向内部RAM 30H
MOV R0, #0           ; 初始化计数器为0

LOOP:
    MOV A, @DPTR      ; 读取内部RAM中的数据
    MOVX @R0, A       ; 将数据写入外部RAM
    INC R0            ; 外部RAM地址加1
    INC DPTR          ; 内部RAM地址加1
    CJNE A, #'$', DONE   ; 比较是否为'$', 如果是则结束
    SJMP LOOP

DONE:
    ; 结束程序

3、编写汇编程序,查找内部RAM的30H-50H单元中是否有0AAH这一数据。若有,则将51H单元置为“01H”,若未找到,则将51H单元置为“00H”。

ORG 0000H

MOV R0, #30H        ; 指针指向内部RAM 30H
MOV R1, #0AAH       ; 查找的数据
MOV R2, #51H        ; 存储结果的单元

SEARCH_LOOP:
    MOV A, @R0       ; 读取内部RAM中的数据
    CJNE A, R1, NOT_FOUND  ; 比较数据是否为0AAH,如果不是则继续搜索
    MOV @R2, #01H     ; 若找到0AAH则将51H单元置为01H
    SJMP DONE

NOT_FOUND:
    INC R0            ; 内部RAM地址加1
    CJNE R0, #51H, SEARCH_LOOP  ; 继续搜索直到结束位置

    MOV @R2, #00H     ; 若未找到0AAH则将51H单元置为00H

DONE:
    ; 结束程序

三、程序代码调试及结果

通过Keil软件对上述三个汇编程序进行编译、下载和仿真测试,确认程序运行正确。观察相应的寄存器和存储器变化,验证实验内容的正确性。

四、实验小结

单片机原理应用实验报告(中北大学大数据学院) 啊哈,需要用到proteus的可能要根据自己的情况修改一下,换了机子可能就不能运行。。。 实验一 简单程序设计 1. 学会实验系统的使用,掌握KEIL软件仿真与调试方法。 2. 编制一个计算x=a2+b2 3. 验证上述结果的正确 实验二 程序设计 1.将内部RAM中起始地址为data的数据串串送到外部RAM中起始地址为buffer的存储区域中,直到发现‘$’字符 2.计算双字节无符号数的乘法R0R1R2R3=R4R5*R6R7,计算1234*5678的值。要求乘法程序用子程序实现。 实验三 中断实验 1.将微动开关接到INT0,P1口接到8个发光二极管,利用外部中断电平触发方式,每按一次微动开关,使得发光二极管显示的二进制数字加1 2.将微动开关接到INT0,P1口接到8个发光二极管,利用外部中断下降沿触发方式,每按一次微动开关,使得发光二极管显示的二进制数字加1 3.体会两种不同触发类型中断的区别。 实验四 定时器实验 1.将P1口接到8个发光二极管 2.编程使得发光二极管显示的二进制数,每一秒加1 3.将微动开关接到T0,利用计数器功能,每按一次微动开关,使得发光二极管显示的二进制数字加1 4.可考虑采用计数器的不同工作模式 5.验证上述操作的正确性,对实验结果进行解释 实验五 存储器扩展使用 1. 利用试验箱中的器件,给单片机扩展一片随机读写存储器 2. 确定扩展的存储器的地址范围 3. 编写程序,将扩展的存储器中填写内容,每个单元中填写其地址码低8位的“非值” 4. 验证扩展存储器的可用性 5. 对实验结果进行说明 实验六 接口实验 1. 连接实验箱上的数码管,编程在上面显示数字2017 2. 连接实验箱上的键盘和数码管,编写程序,将键盘输入值写在数码管的最右端,原来的数值,向左端移动。 3. 输入多次的情况 实验七 综合实验 1. 连接实验箱上的键盘和数码管 2. 编程,将实验箱做成一个能显示时间的电子表 3. 该表能修改时间 4. AD实验,通过AD转换器,显示当前的输入电压值,要求精确到小数点后2位数(选做)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高教百科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值