单片机实验程序
单片机频率测量实验程序
实验十六频率测量实验
一、实验目的
掌握PCF8563的功能特点,频率测量的原理,测量程序的编写
二、实验电路
如图所示,将被测信号PCF8563的CLKOUT脚与单片机的P35(T1)相连,作为外部计数信号,将JP1的2脚与4*1脚相连,构成独立式键盘。将JP2短接,JP3、JP4断开,选择LED显示器。
三、实验内容
编写频率测量程序,测量PCF8563实时时钟芯片所产生的时钟CLKOUT的频率,用四个按键控制PCF8563产生不同的频率,数码管的显示应分别为32.76K和1024、32、1HZ。
四、参考程序
#include /*头文件的包含*/
#include
#define uchar unsigned char /*宏定义*/
#define uint unsigned int
#define PCF8563 0XA2
#define WRADDR 0X00
#define RDADDR 0X02
sbit KEY13=P2^4;
sbit KEY14=P2^5;
sbit KEY15=P2^6;
sbit KEY16=P2^7;
extern bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no);
extern bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no);
uchar code segtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x 89,0x8c};
单片机外部中断实验(附C语言程序)
单片机外部中断实验(附c程序)
一、实验目的
掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。
。
二、实验内容
8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能:
(1)合上、P3.3断开时LED1闪烁
(2)P3.2断开、P3.3合上时LED2闪烁
(3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁
(4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁
试编写C语言和汇编语言程序
使用自然优先级就可以
也可 XO 高级X1低级PX0=1 PX1=0
四、实验电路
五、参考程序(自己完成)
C程序:
Include
Sbit P2_0=P2^0;
Sbit P2_1=P2^1;
Sbit P3_2=P3^2;
Sbit P3_3=P3^3;
void delay02s(void) //延时0.2秒子程序
{
unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
Void main
{
EA=1;
EX0=1;
EX1=1;
ITO=1;
IT1=1;
PX0=1;
PX1=0;
While(1);
}
Void int0(void) interrupt 0 { if(!P3_2)
{
While(1)
{
P2_0=1;
delay02s();
P2_0=0;
delay02s();
}
}
}
Void int1(void) interrupt 2 { if(!P3_3)
单片机测试程序
实习步骤
本单片机最小系统是以AT89S51单片机为控制核心,由驱动芯片ZLG7289与16键的键盘矩阵实现对两个4位一体共阴数码管LED的驱动显示,由LCD1602实现液晶显示,再通过电平转换芯片MAX232并连接到232接口实现串口通信,系统还包含有蜂鸣器,USB 及适配器供电接口,JTAG程序下载接口,总线扩展等。首先,用protel99se软件制作硬件电路原理图及绘制PCB板;其次,安装焊接单片机最小系统开发板及下载线,并且进行电路调试;再次,在Keil uVision2软件环境下调试单片机汇编程序或C语言程序,用单片机下载软件ISPLAY或STC-ISP V31实现程序下载,从而用编程实现最小系统的基本功能;最后,编写综合程序以实现系统功能的综合以及拓展功能,其中串口通信用到电脑自带的超级终端或AccessPort软件。
单片机最小系统板焊接
首先对照元件清单和电路图,检查器件是否完整,型号﹑规格﹑安装是否正确。然后将各器件根据焊接规则焊接到电路板上,其中对于器件的摆放方向和位置需十分注意。先焊发热器件电阻和较低的电容,再焊较大的器件,焊接JTAG线,JTAG线里面的芯片电阻,电阻电容均为贴片封装,焊接时需小心谨慎,对于各条线引的焊接也需谨慎,按照其对应的顺序进行焊接,焊接结束后,自行组装。
检查已经焊好的电路板和JTAG下载线是否无误:⑴先用万用表检查电路板焊接是否都正确。⑵当检查没有短路,断路,虚焊,漏焊等错误后,给电路板供电,看二极管是否亮,是否有器件过热,有可能二极管或三极管会在焊接的过程中被烧坏,那样的话就要重新焊器件。⑶再用Keil软件给板子拷正确的程序,检查是否能按功能正常工作。单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。
单片机程序流程图及源代码
单片机上机实验报告
【实验一】端口实验,掌握通过端口编程实现数据输出和输入的方法,并观察结果。
实验内容:1)输出实验:假定4个端口全部连接发光二极管,编程实现所有发光二极管同时亮,延迟一定时间(自定)后,又同时灭,如此循环。2)输入:从P0口输入某个数据到累加器A,打开观察窗口观察数据是否进入累加器A。实现方式:通过peripherals实现端口数据观察实验。
程序流程图:
将P0到P3端口先赋值为0,调用延迟后,再赋1,然后循环执行。
源代码:
ORG 0000H ;程序入口地址
LJMP MAIN ;跳转到主程序
ORG 0300H ;主程序地址
MAIN:MOV P0,#00H;
MOV P1 ,#00H;
MOV P2 ,#00H;
MOV P3 ,#00H ;P0~P3均赋值为0
ACALL DEL;调用延迟
MOV P0 ,#0FFH;
MOV P1 ,#0FFH;
MOV P2 ,#0FFH;
MOV P3 ,#0FFH;P0~P3均设为1
MOV A,P0;将P0口值赋给累加器
ACALL DEL;
AJMP MAIN;跳转到主程序入口
ORG 0200H;延迟程序入口地址
DEL:MOV R5,#04H;寄存器实现延迟,
F3:MOV R6,#0FFH;若主频为12MHZ则
F2:MOV R7,#0FFH;延时为256*256*4
F1:DJNZ R7,F1;0.26S,人眼可分辨
DJNZ R6,F2;
DJNZ R5,F3;
RET;从延迟程序返回
END;结束
3.假设P0口外接一个数码管(共阴),如图,请在数码管上轮流显示数字
单片机外部中断实验程序
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbitrs = P2^6;
sbitrw = P2^5;
sbit ep = P2^7;
sbit k1 = P3^2;
sbit k2 = P3^3;
uchari=0,j=0,t=0,time=0;
uchartimemiao=0;
uchartimemiaoc=0;
void delay(uchar t)//延时
{
uinti;
while (t--)
{
for ( i = 0; i< 250; i++);
}
}
bit lcd_bz()//忙状态读取
{
bit result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (bit)(P0 & 0x80);
ep = 0;
return result;
}
void lcd_wcmd(ucharcmd)//写指令
{
ucharnum=255;
while (lcd_bz()){
num--;
if(num==0) break;//无忙回答时退出死循环}
rs = 0;//指令寄存器
rw = 0;//写
ep = 0;
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
(完整word版)单片机C语言程序设计实训100例
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例
第 01 篇基础程序设计
01 闪烁的LED
/*名称:闪烁的LED
说明:LED按设定的时间间隔闪烁
*/
#include
#define uchar unsigned char
#define uint unsigned int
sbit LED=P1^0;
//延时
void DelayMS(uint x)
{
uchar i;
while(x-—)
{
for(i=0;i〈120;i++);
}
}
//主程序
void main()
{
while(1)
{
LED=~LED;
DelayMS(150);
}
}
02 从左到右的流水灯
/* 名称:从左到右的流水灯
说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果
*/
#include〈reg51。h〉
#include
#define uchar unsigned char #define uint unsigned int
//延时
void DelayMS(uint x)
{
uchar i;
while(x—-)
{
for(i=0;i〈120;i++);
}
}
//主程序
void main()
{
P0=0xfe;
while(1)
{
P0=_crol_(P0,1); //P0的值向左循环移动
DelayMS(150);
}
}
03 8只LED左右来回点亮
/*名称:8只LED左右来回点亮
说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果
*/
#include
#include〈intrins.h>
#define uchar unsigned char #define uint unsigned int
单片机实验一程序
三、设计要求
1、编写程序将00H~0FH 16个数据分别送到单片机内部
RAM 30H~3FH单元中。
2、编写程序将片内RAM 30H~3FH的内容传送至片内RAM
40~4FH单元中。
3、编写程序将片内RAM 40H~4FH单元中的内容传送到外
部RAM 4800H~480FH单元中。
4、编写程序将4800H~480FH单元内容送到外部RAM
5800H~580FH单元中。
5、编写程序将片外RAM 5800H~580FH单元内容传送回
片内RAM 50H~5FH单元中。
五、思考题
1、说明MCS-51系列单片机对片内RAM和片外RAM存贮器各有
哪些寻址方式?
2、说明指令MOV A,20H和MOV C,20H中的20H含义有什
么不同?传送指令中的助记符MOV,MOVX,MOVC各适用
于访问哪个存储器空间?
ORG 0000H
CLR A
MOV A,#00H
MOV R0,#30H
MOV R7,#10H
LOOP:MOV @R0,A
INC R0
INC A
DJNZ R7,LOOP
MOV R0,#30H
MOV R1,#40H
MOV R7,#10H
LOOP1:CLR A
MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R7,LOOP1
MOV R1,#40H
MOV DPTR,#4800H
MOV R7,#10H
LOOP2:CLR A
MOV A,@R1
MOVX @DPTR,A
INC R1
INC DPTR
DJNZ R7,LOOP2
MOV R7,#10H MOV DPTR,#4800H MOV R1,DPH
单片机试验程序
3-1 ORG 0000H
SJMP MAIN
ORG 0040H
MAIN: MOV R0,#30H
MOV A,R2
ADD A,#03H
MOVC A,@A+PC
MOV @R0, A
HE: SJMP HE
TABLE:DB 00H,01H,04H,09H,16H DB 25H,36H,49H,64H,81H
END
3-3 ORG 0000H
LJMP MAIN
ORG 0040H
MAIN: MOV R0,#30H
MOV A,R2
ADD A,R2
MOV R3,A
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV @R0,A
INC R0
MOV A,R3
INC A
MOVC A,@A+DPTR
MOV @R0,A
HE: SJMP HE
TABLE:DW 0,1,8,27H,64H,125H
DW 216H,343H,512H,729H
END
4-1 ORG 0000H
LJMP MAIN
ORG 0040H
MAIN:MOV A,#0FFH
MOV B,#64H
DIV AB
MOV 21H,A
MOV A,#0AH
XCH A,B
DIV AB
SWAP A
ADD A,B
MOV 22H,A
L1: SJMP L1
END
4-2 ORG 0000H
LJMP MAIN
ORG 0040H MAIN:MOV A,#23H
MOV B,#10H
DIV AB
MUL AB
MOV B,#0AH
DIV AB
SWAP A
ORL A,B
L1: SJMP L1
END
5-1 ORG 0000H
LJMP MAIN
ORG 0040H MAIN:MOV R2,#70H
[整理]单片机6个必做实验
第一部分软件实验
实验一二进制到BCD码转换
一、实验目的
1、掌握简单的数值转换算法
2、基本了解数值的各种表达方法
二、实验说明
单片机中的数值有各种表达方式,这是单片机的基础。掌握各种数制之间的转换是一种基本功。我们将给定的一个二进制数,转换成二十进制(BCD)码。将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123。
三、实验内容及步骤
1、启动计算机,打开伟福仿真软件,进入仿真环境。首先进行仿真器的设置,选择使用伟福软件模拟器。
2、打开TH2.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA),点击暂停按钮,观察地址30H、31H、32H的数据变化,30H更新为01,31H更新为02,32H更新为03。用键盘输入改变地址30H、31H、32H的值,点击复位按钮后,可再次运行程序,观察其实验效果。修改源程序中给累加器A的赋值,重复实验,观察实验效果。
3、打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。
四、流程图及源程序
1.源程序
RESULT EQU 30H
ORG 0000H
LJMP START
BINTOBCD:
MOV B,#100
DIV AB
MOV RESULT,A ;除以100得百位数
MOV A,B
MOV B,#10
DIV AB
MOV RESULT+1,A ;余数除以10得十位数
MOV RESULT+2,B ;余数为个位数
RET
START:
MOV SP,#40H
MOV A,#123
单片机外部中断实验程序
单片机外部中断实验程序
单片机外部中断是一种常用的硬件中断方式,可以使单片机在执行主程序的同时,及时响应外部设备的信号,并进行相应的处理。在本实验中,我们将编写一段简单的程序,用于实现单片机外部中断的功能。
首先,我们需要明确实验的硬件配置。本实验中,我们使用的是STC89C52单片机,其中P3.2引脚作为外部中断0的引脚。接下来,我们将详细介绍实验的步骤。
首先,在主程序中,我们需要首先对单片机的外部中断进行初始化设置。具体的设置步骤如下:
1.设置外部中断引脚的工作方式。我们需要将P3.2引脚设置为外部中断0的工作模式。可以通过将P3.2引脚对应的P3CON寄存器位设置为1来实现。
2.设置外部中断的触发方式。单片机外部中断可以通过电平触发或边沿触发来响应外部设备的信号。在本实验中,我们选择边沿触发方式。可以通过将IE寄存器中的EX0位设置为1来实现。
然后,在程序的主循环中,我们可以编写一个简单的实验程序,用于验证外部中断的功能。具体的步骤如下:
1.在主循环中,我们可以设置一个循环延时函数,用于模拟主程序的执行过程。
2.在循环延时函数的适当位置,可以编写一段代码来模拟外部设备的信号触发。可以通过向P
3.2引脚输出一个高电平信号来触发外部中断。
3.在外部中断的中断服务函数中,我们可以编写一段简单的代码,用于处理外部中断触发时的操作。可以通过向LED等外设输出一个特定的信号,以验证中断服务函数的正确性。
最后,在程序的尾部,我们可以添加一个死循环,用于保证程序的持续运行。具体的代码如下所示:
```
单片机实验程序及流程图
《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义
三.程序清单及程序流程框图
ORG 0000H Array LJMP MAIN
MAIN: MOV R0,#30H
MOV R2,#10H
CLR A
A1: MOV @R0,A
INC R0
INC A
DJNZ R2,A1
MOV R0,#30H
MOV R1,#40H
MOV R2,#10H
A2: MOV A, @R0
MOV @R1,A
INC R0
INC R1
DJNZ R2, A2
MOV R1,#40H
MOV DPTR ,#4800H
MOV R2, #10H
A3: MOV A,@R1
MOVX @DPTR ,A
INC R1
INC DPTR
DJNZ R2,A3
MOV SP,#60H
MOV R2,#10H
MOV DPTR ,#4800H
PUSH DPL
PUSH DPH
MOV DPTR,#5800H
MOV R3,DPL
MOV R4,DPH
A4: POP DPH
POP DPL
MOVX A,@DPTR
INC DPTR
PUSH DPL
PUSH DPH
MOV DPL,R3
MOV DPH,R4 MOVX @DPTR,A INC DPTR
MOV R3,DPL
MOV R4,DPH
DJNZ R2,A4
MOV R0,#50H
MOV DPTR,#5800H MOV R2,#10H
A5: MOVX A,@DPTR MOV @R0,A
INC R0 INC DPTR DJNZ R2,A5
POP DPH POP DPL HERE: LJMP HERE
单片机c语言程序设计---单片机实验报告
单片机c语言程序设计---单片机实验报告
实验目的:
1.掌握单片机的中断的原理、中断的设置,掌握中断的处理及应用
2.掌握单片机的定时器/计数器的工作原理和工作方式,学会使用定时器/计数器
实验内容:
一.定时器/计数器应用程序设计
实验1.计数
功能:用定时器1方式2计数,每计数满100次,将P1.0取反。(在仿真时,为方便观察现象,将TL1和TH1赋初值为0xfd,每按下按键一次计数器加1,这样3次就能看到仿真结果。)分析:外部计数信号由T1(P3.5)引脚输入,每跳变一次计数器加1,由程序查询TF1。方式2有自动重装初值的功能,初始化后不必再置初值。
将T1设为定时方式2,GATE=0,C/T=1,M1M0=10,T0不使用,可为任意方式,只要不使其进入方式3即可,一般取0。TMOD=60H。定时器初值为X=82-100=156=9CH,TH1=TL1=9CH。
程序:#include
void main()
{
P1_0=0;
TMOD=0x60;
TH1=0xFD;
TL1=0xFD;
ET1=1;
EA=1;
TR1=1;
while(1)
{
}
}
void timer1_Routine()interrupt3
{
P1_0=~P1_0;}
实验2.中断定时
使用定时器定时,每隔10s使与P0、P1、P2和P3端口连接的发光二极管闪烁10次,设P0、P1、P2和P3端口低电平灯亮,反之灯灭。
分析:中断源T0入口地址000BH;当T0溢出时,TF0为1发出中断申请,条件满足CPU响应,进入中断处理程序。主程序中要进行中断设置和定时器初始化,中断服务程序中安排灯闪烁;TL0的初值为0xB0,TH0的初值为0x3C,执行200次,则完成10s定时。
51单片机实验报告
51单片机实验报告
51单片机是一种广泛应用于控制领域的微型处理器。本文将介绍我所进行的两个基础实验,包括实验目的、实验内容、实验原理和实验结果。
实验一——点亮LED灯
实验目的:
了解51单片机的基本接口和编程方法;学会使用单片机的开发工具和调试器;掌握51单片机控制LED灯的方法。
实验内容:
将LED灯连接至51单片机的P1.0引脚,并进行控制。编写程序,使得LED灯能稳定地点亮。
实验原理:
单片机可通过其IO口控制外部设备,使用高低电平来控制LED灯的开关。P1.0是51单片机的一个输出端口,可通过赋予其
电平状态从而控制LED的点灯与熄灭。当单片机输出高电平时,LED灯会点亮,否则会熄灭。
实验结果:
经过编写程序和调试后,成功实现了LED灯的点亮和熄灭。
按下按键即可改变LED的状态。
实验二——数码管计数器
实验目的:
了解51单片机的数字口和中断响应机制;掌握编写定时器中
断程序的方法;学会使用键盘进行输入和外接数码管进行输出。
实验内容:
通过对8位数码管控制台的编程,实现对数字的控制,使用定
时器中断实现计数器功能,加深对51单片机中断响应机制的理解。
实验原理:
单片机中断请求源包括外部中断源、定时器/计数器中断源以及串口中断源。本次实验使用定时器中断,可实现一定时间间隔内数字的加减;使用键盘进行输入,采用P3口中断请求源实现按键响应,输出则通过数码管接口外设实现。
实验结果:
通过定时器计数器、中断响应和数码管接口外设,成功实现一组数字的计数。按下按键即可进行数字的加减,并通过数码管显示出来。
结语:
51单片机实验报告
51单片机实验报告
一、引言
51单片机是一种广泛应用于嵌入式系统开发的微控制器芯片。
本实验旨在通过对51单片机的实验研究,加深对该芯片的理解和
应用。
二、实验一:LED灯闪烁控制
本实验通过编写程序,控制51单片机上的LED灯以特定的频
率闪烁。为了实现这个目标,我们首先需要了解51单片机的引脚
布局,确定LED灯的连接方式。然后,通过编写相应的汇编程序,控制引脚的电平变化,从而实现LED灯的闪烁。
三、实验二:数码管显示
数码管是一种常见的输出设备,通过控制引脚的输出来显示特
定的数字。本实验中,我们通过编写程序,实现通过51单片机控
制数码管的显示。通过对数码管的驱动原理和编程的学习,我们
可以灵活地控制数码管的显示内容和频率。
四、实验三:蜂鸣器发声
蜂鸣器是一种常见的声音输出设备,通过控制引脚的输出来产生特定的声音。本实验中,我们通过编写程序,实现通过51单片机控制蜂鸣器的发声。通过学习蜂鸣器的驱动原理和编程,我们可以根据需要产生不同频率和节奏的声音。
五、实验四:温湿度检测
温湿度检测是一种常见的环境监测需求。本实验中,我们通过引入温湿度传感器,实现通过51单片机获取环境的温度和湿度信息。通过编写程序和读取传感器的数据,我们可以实时监测环境的温湿度,并进行相应的控制和反馈。
六、实验五:红外遥控
红外遥控是一种常见的无线通信方式,通过发送和接收红外信号来实现远程控制。本实验中,我们通过引入红外发射和接收模块,实现通过51单片机进行红外遥控。通过编写相应的程序,设置红外遥控的编码和解码方式,我们可以实现对外部设备的遥控操作。
单片机汇编语言程序设计实验
单片机汇编语言程序设计实验
一、实验目的
掌握汇编语言设计、编程及程序的调试方法,并熟悉键盘操作。
二、实验内容
(一)清零实验
把7000H~70FFH的内容清零。
1、实验程序及框图
2、实验步骤
①当DVCC单片机仿真实验系统独立工作时
(1)将固化区EPROM中实验程序目标码传送到仿真RAM区,操作如下:输入0后按F1键,再输入0FFF后按F2键,再输入0后按EPMOV稍等,系统返回初始状态,显示“P.”。
(2)根据表2—1所示,通过键盘输入实验程序的起始地址0030H,再按执行键EXEC,表示连续运行该程序,稍侯,按RESET键退出运行;如果以单步运行程序,则输入0030后,按SETP键,按一次执行一条语句,直到执行到003CH 为止,按MON键退出运行;如果以断点运行程序,则先输入003CH(断点地址),再按F1键,再输入0030(起始地址),然后按EXEC键执行程序,当执行到003CH 时自动停下来,此时按MON键退出。
(3)用存贮器读写方法检查7000H~70FFH中的内容应全是00H。
②当DVCC仿真实验系统联PC机时
(1)在闪动“P.”状态,按PCDBG键;
(2)在PC机处于在Win95/98软件平台下,单击DVCC图标。
(3)在“系统设置”选项中设定仿真模式为内程序、内数据。对硬件实验
4、5、6、7、8、9、12、15而言,仿真模式应设定为内程序、外数据。
(4)根据屏幕提示进入51/96动态调试菜单。
(5)联接DVCC实验系统(Ctrl+H)
(6)装载目标文件(Ctrl+L)
(7)设置PC起始地址
单片机实验程序
• • • • •
四、实验操作 拍7000 按TV键 按F2 1 2 7000 00 4 3 5 7001 00 F 0 7002 00 实验前后
• 70FF
7
8
00
• 实验二 拆字程序 • 一、实验内容
• 把7000H的内容拆开,高位送7001H低位,低位送 7002H低位。7001H、7002H高位清0,一般用于把数据 开始 送显示缓冲区时用。
0060 F0 0061 80FE
12 MOVX @DPTR,A 13 LL1: SJMP LL1 14 END
4 7 F 5 8 F
四、实验操作 运行前: 7000H 7001H 7002H 运行后: 7000H 7001H 7002H
4 0 0
5 4 5
• 实验三 拼字程序 • 一、实验内容
• 把7000H和7001H的低位相拼后送入7002H,一般用于 把显示缓冲区数据取出拼装成一个字节。
K1
• • • • • • • • • • • • • •
五、实验程序 8000 8002 8004 8007 800A 800B 800D 800E 8200 8202 8204
ORG 8000H 747F MOV A,#7FH F590 DISP: MOV P1,A 128200 LCALL:DELY 20B203 JB P3.2 LOP1 23 RL A 80F5 SJMP DISP 03 LOP1: RR A 80F2 SJMP DISP ORG 8200H 7A64 DELY: MOV R2,#100 7B09 DE2: MOV R3,#02 7C00 DE1: MOV R4,#00H
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实验程序
软件实验一
1、分别编程实现两个16位无符号数相加,结果存放在40H41H中;两个16位的无符号数相减,结果存放在30H31H中。
; 两个16位无符号数相加,结果存放在30H31H中
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN :
MOV R3,#01H ;输入加数高八位
MOV R4,#23H ;输入加数低八位
MOV R5,#45H ;输入被加数高八位
MOV R6,#67H ;输入被加数低八位
MOV A,R4 ;将R4存入寄存器A
ADD A,R6 ;A与R6相加,结果存入A
MOV 31H,A ;将低八位的和数存入31H
MOV A,R3 ;将R3存入寄存器A
ADDC A,R5 ;A与R5相加,结果存入A
MOV 30H,A ;将高八位的和数存入30H
SJMP $
END
; 两个16位的无符号数相减,结果存放在30H31H中。
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN :
MOV R3,#12H ;输入减数高八位
MOV R4,#34H ;输入减数低八位
MOV R5,#56H ;输入被减数高八位
MOV R6,#78H ;输入被减数低八位
MOV A,R4 ;将R4存入寄存器A
CLR C ;C位清"0"
SUBB A,R6 ;A与R6相减,结果存入A
MOV 31H,A ;将低八位的差数存入31H
MOV A,R3 ;将R3存入寄存器A
SUBB A,R5 ;A与R5相减,结果存入A MOV 30H,A ;将高八位的差数存入30H
SJMP $
END
2、编程实现
X (X ≥40)
Y= 2X (20 0(X≤20) ;实现X>=40时,Y=X;20 ORG 0000H LJMP MAIN ORG 0030H MAIN: CMP40: CJNE R2,#40,NEXT0 ;X与40比较,结果由CY读出 NEXT0: JNC BIGGER40 ;判断C的值,C为0时则X大于或者等于40,跳到BIGGER40 JC CMP20 ;判断C的值,C不为0时则X小于40,跳到CMP20 CMP20: CJNE R2,#21,NEXT1 ;X与21比较,结果由CY读出 NEXT1: JNC BIGGER20 ;判断C的值,C为0时则X大于或者等于21(即X大于20),跳到BIGGER20 JC SMALLER20 ;判断C的值,C不为0时则X小于20,跳到SMALLER20 BIGGER40: MOV A,R2 ;X>=40时,将X的值赋给存放Y的值的R3 MOV R3,A SJMP $ BIGGER20: MOV A,R2 ;20 MOV B,#02 MUL AB MOV R3,A SJMP $ SMALLER20: CLR A ;X<20时,将0赋给Y MOV R3,A SJMP $ 3、学生实验:编写80个数相加,结果存放在30H31H中。 ;编写80个数相加,结果存放在30H31H中 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV R2,#80 ;输入累加的个数N存放到R2中 MOV R0,#32H ;输入参与累加数据的首个数据的地址 ADDER: MOV A,@R0 ;将参与累加的数据的值赋给A ADD A,31H ;将A与当前累加数的和的低位(31H)相加结果存放在A中 MOV 31H,A ;将求得的和数的低位放入31H中 CLR A ;对A清"0" ADDC A,30H ;计算已得累加数高位与当前进位相加,结果存放在A中 MOV 30H,A ;将求得的和数的高位放入30H中 INC R0 ;R0中的数据加1 LOOP: DJNZ R2,ADDER ;循环判断 SJMP $ END 软件实验二 1、编写R1×R2R3=R4R5R6,R1R2×R3R4=R4R5R6R7。 ; R1×R2R3=R4R5R6 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A,R3 ; R1乘以低位数R3 R3xR1=R5R6 MOV B,R1 MUL AB MOV R6,A MOV R5,B MOV A,R2 ; R1乘以高位数R2 ;R2xR1=R4A MOV B,R1 MUL AB MOV R4,B ADD A,R5 ; 高。低乘数结果相加 R5+A=R5 MOV R5,A ;R4+CY=R4 MOV A,R4 ADDC A,#00H MOV R4,A SJMP $ END ;R1R2×R3R4=R4R5R6R7 ORG 0000H LJMP MAIN ORG 0030H ;————R2乘以R3R4存放于R5R6R7 MAIN: LCALL MULL MOV R5,30H MOV R6,31H MOV R7,32H ;调用子程序MULL ;————R1先赋给R2,再乘以R3R4 MOV A,R1 MOV R2,A LCALL MULL ;调用子程序MULL CLR C ;进位清"0" MOV A,32H ;R6加上32H中的值,存放于R6 ADD A,R6 MOV R6,A MOV A,R5 ;R5加上31H中的值,存放于R5 ADDC A,31H MOV R5,A MOV A,#00H ;30H加上进位C,存放于R4 ADDC A,30H MOV R4,A SJMP $ ;————子程序MULL:实现R2乘以R3R4R结果存放于30H31H32H MULL: MOV A,R4 ; R2乘以低位数R4 R3xR1=31H32H MOV B,R2 MUL AB MOV 32H,A MOV 31H,B MOV A,R3 ; R2乘以高位数R3 ;R2xR1=30H MOV B,R2 MUL AB MOV 30H,B ADD A,31H ; 高。低乘数结果相加 31H+A=31H MOV 31H,A ;30H+CY=30H MOV A,30H ADDC A,#00H