当前位置:文档之家› 51单片机实验系统

51单片机实验系统

51单片机实验系统
51单片机实验系统

51单片机实验系统

前 言

单片机的英文为single chip microcomputer ,最早出现在20世纪70年代,国际上现在已逐渐被微控制器(Microcontroller Unit 或 MCU)一词所取代。它体积小,集成度高,运算速度快,运行可靠,功耗低,价格廉,因此在数据采集、智能化仪表、通讯设备以及嵌入式系统等方面得到了广泛应用。正因如此,各高等院校的电类专业均开设了单片机原理及应用或单片机原理及接口技术课程,乃至一些非电专业也开设了这门课。

《单片机原理及接口技术》是硬件和软件密切相关的一门课程,也是理论和实践并重的一门课程,它不但需要教师的讲解,同时也需要学生做大量的实验。通过实验和课程设计,达到对微控制器的理解、掌握和灵活运用的目的。随着《单片机原理及接口技术》课程内容的不断更新,过去的实验设备、实验手段以及实验内容已显陈旧,为了满足实验教学及科学研究的实际需要,为了培养新型的专业人才,我们研制了“微控制器原理及接口技术实验系统”。它是一种完全开放式的教学实验仪器,不仅涵盖了单片机原理及接口技术的基本实验,而且增加了许多具有前瞻性的实验内容,不仅适合本科生的实验教学,也为研究生及研发人员提供了极大方便。

本实验指导书是以”微控制器原理及接口技术实验系统”为平台,密切结合单片机原理及接口技术的教学实际需要,兼顾前瞻性的实验内容而编写。本书共分三章,第一章,微控制器原理及接口技术实验系统简介。主要介绍了系统构成及功能,读者须知等内容,包括各接口单元的地址分配及各选择开关的定义。第二章,实验。本章共安排30个实验,其中实验1~11为基础性实验,包括编程技术训练、定时器、中断系统等,该部分均属学习单片机原理课应知应会内容。实验12~20为并行接口扩展单元实验,包括8253,8255,8279,8251,ADC0809,DAC0832等常规接口单元电路。此部分属于学习单片机接口技术之后应知应会的内容。实验21~30属于前瞻性的实验内容,包括128×64汉字点阵液晶显示屏。I2C总线和SPI总线接口单元电路以及IC卡的读写等,此部分可供本科生课程设计和研究生及研发人员使用。指导书中所列均为单元实验,指导教师或学生可以将相关单元组合,做一些综合性或闭环系统式的实验。

本实验指导书在编写过程中,力图遵循”两强一突出”的原则,即在编写每个实验的实验原理段落时知识性要强,编写实验步骤和实验要求段落时可操作性要强,在编写实验内容和实验思考段落时要突出启发式。使学生在认真作完一个实验之后,有所回味,能举一反三,使之在动手能力和设计能力方面得到综合训练。但由于作者能力所限,错误在所难免,恳请读者批评指正。

编著者

2003年12月

目录

前言 (1)

第一章微控制器原理及接口技术实验系统简介 (4)

1. 实验系统组成 (4)

1.1 基础性实验部分 (4)

1.2 提高性实验部分 (5)

1.3 系统扩展部分 (6)

1.4 附属单元 (6)

2. 系统资源分配 (7)

3. 选择开关定义 (8)

4. 扩展电缆连接器引脚定义 (8)

5. 仿真环境简介 (10)

第二章软件实验 (11)

实验一、实验系统认识及操作 (11)

实验二、RAM数据传送程序设计 (13)

实验三、算术运算程序设计 (16)

实验四、数据处理程序设计 (18)

实验五、数制转换程序设计 (20)

第三章微控制器实验 (22)

实验六、P1口控制实验 (22)

实验七、CPU内部定时/计数器 (24)

实验八、中断控制实验 (26)

第四章微控制器系统扩展实验 (31)

实验九、扩展I/O接口(74HC541、74HC573) (31)

实验十、8位LED显示(I/O口控制) (32)

实验十一、2×8键盘扫描实验(I/O控制) (35)

实验十二、可编程键盘/显示器实验(8279) (37)

实验十三、可编程并行接口实验(8255) (40)

实验十四、可编程定时/计数器实验(8253) (43)

实验十五、模/数(A/D)转换实验 (46)

实验十六、数/模(D/A)转换 (49)

第五章微控制器提高扩展实验 (51)

实验十七、可编程串行接口芯片实验(8251) (51)

实验十八、RS232串行通信实验 (55)

实验十九、485串口通信实验 (57)

实验二十、实时时钟DS12887读写实验 (59)

实验二十一、串行时钟芯片DS1302试验 (65)

实验二十二、LCD液晶显示器实验(并行方式) (69)

实验二十三、LCD液晶显示器(串行方式) (72)

实验二十四、SPI总线E2PROM实验 (77)

实验二十五、I2C(24C02)读写实验 (80)

实验二十六、八位串行模数转换器TLC549 (84)

实验二十七、八位串行数模转换器TLC5620 (86)

实验二十八、IC卡读写实验 (88)

实验二十九、步进电机实验指导 (93)

第一章 微控制器原理及接口技术实验系统简介

1. 实验系统组成

微控制器原理及接口技术实验系统是一种开放式实验系统,该实验系统的设计密切结合各院校教学的实际,也吸纳了许多新的接口技术和新器件,体现了实用性和先进性相结合的原则。实验平台结构新颖,样式美观,元件布局紧凑合理,使用方便,集成电路尽量采用双列直插芯片,便于维护。实验系统包含30余个单元电路,其中50%是学习微控制器原理及接口技术应知应会部分,其余属于提高扩展知识面部分。实验系统内装SUPER ICE51仿真器,其仿真软件环境使用简单、功能强大。微控制器原理及接口技术实验系统及其仿真软件构成了一个完整的实验与开发集成系统,本实验系统不仅使用于本科生教学,也为研究生进行各种实验和开发提供了极大方便。实验系统组成

1.1基础性实验部分

(1)数据存储器读写单元

外部数据存储器采用8K的RAM(6264)一片,可用来做外部存储器读写实验。

(2)简单I/O扩展输入

实验箱上有8只拨动开关S8—S15,开关拨向上方输入为“1”,向下为“0”。

(3)简单I/O输出锁存

该电路有8只发光二极管及相应驱动电路,当74LS573锁存器被选中。8只发光二极管显示P0口对应位的数据输出结果。输出为“0”时对应发光二极管亮。

(4)计数/定时器

采用8253作为计数/定时器。可用来做计数器/定时器扩展实验,可以作为直流电机速度反馈的脉冲计数,也可以用来对脉冲源计数,在进行82C51串行口通讯扩展实验时,可用8253来产生波特率时钟信号。

(5)键盘及LED显示

该电路采用8279实现对4*4键盘、8位LED数码管的扫描管理。键盘、数码管的扫描也可以直接采用I/O口方式,通过设定S5—S6拨码开关来实现。

(6)模数转换

该单元采用ADC0809,可完成8路模数转换实验。

(7)数模转换

D/A转换芯片DAC0832可以将数字信号转换成单极性模拟信号输出。

单片机通过该单元可以和DAC0809以及直流电机构成闭环控制系统。

(8)I/O扩展

该单元使用可编程并行I/O口扩展芯片8255。通过24个插孔和适当编程可做I/O口的

扩展和输入、输出实验。

(9)复位电路

复位电路包含了手动复位、上电复位和MAX813看门狗复位,通过选择开关S3确定复位方式。

1.2提高性实验部分

(10)I2C总线DA

使用I2C总线数模转换芯片TLC5620,可做I2C总线方式的数模转换实验。

(11)I2C总线AD

使用I2C总线模数转换芯片TLC549,可做I2C总线方式的模数转换实验。

(12)I2C总线EEPROM

使用I2C总线方式EEPROM存储芯片AT24C02,其存储容量为2K,可做I2C总线方式的存储器读写实验。

(13)串口时钟DS1302

使用I2C总线数时钟芯片DS1302,可做I2C总线方式的时钟实验。

(14)SPI总线EEROM

使用SPI总线方式EEPROM存储芯片X5025,可做SPI总线方式的存储器读写实验。

(15)LCD液晶显示器单元

该单元采用RT12864HZ汉字图形点阵液晶显示模块,其屏幕大小为128*64点阵,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。与单片机的连接可接成并行方式(S16—S19拨向右边)和串行方式(S16—S19拨向左边)。

(16)并口时钟DS12887

实时时钟DS12887能够计秒、分、时、天、星期、日、月、年并有闰年补偿功能,该单元与单片机、LED或液晶显示单元结合,可以实现时间显示功能,可以通过程序设置,实现12小时或24小时时钟模式。该单元还可以通过编程实现不同频率的方波输出。

(17)串行通讯扩展

采用可编程串行通讯扩展芯片82C51,可以实现串并口的转换。可以和RS232或RS485结合进行串口通讯扩展实验。

(18)IC卡读写单元

该电路可以实现IC卡的读写实验,IC卡与接口设备的连接采用I2C总线方式。

(19)直流电机驱动及测速单元

直流电机采用三极管驱动,可实现单方向调速控制。

测速电路使用光电码盘测量电机转速,输出为40周/转矩形波信号。可以结合计数器/

定时器实现对电机测速。

(20)步进电机单元

该单元实现对步进电机的控制,其A、B、C、D四相控制信号通过插孔接入,其运动状态由四个二极管A、B、C、D对应显示。

(21)CPLD实验电路

采用Lattice公司的在系统可编程逻辑器件ispLSI 1016E 80LJ,可进行CPLD实验。1.3系统扩展部分

(22)RS-232接口

该电路采用MAX232芯片,可以进行符合RS-232电气通信标准的实验。

(23)RS-485接口

该电路采用MAX485芯片,可以进行符合RS-485电气通信标准的实验。

(24)微型打印机接口

可以连接到微型打印机,打印机的控制实验。

(25)USB接口

可以外接USB接口附板,进行完全符合USB接口协议规范的实验。

(26)CAN总线接口

可以外接CAN总线接口附板,进行完全符合CAN总线接口协议规范的通讯实验。1.4附属单元

(27)开关电源

51单片机实验箱内置高效开关电源,提供+5V,-5V,+12V,-12V直流电源。当220V/50Hz 交流电接通时,实验与开发平台上电源电路中标有+5V,-5V,+12V,-12V的引线插孔处均带电,可作为电源供实验和开发使用。

(28)基准电压源

提供2.5V基准电源,可以通过插孔引出,供相关实验单元使用。

(29)8位开关量输出

有3红、3绿、2黄共8只二极管,可以作为一般I/O口的输出,也可以用来做红、绿、黄交通灯实验。

(30)8位开关量输入

简单I/O口输入电路有8个插孔VG1—VG8,可作为任何I/O口的开关量输入设备。

(31)单脉冲发生器

产生单脉冲信号。每次拨动开关,信号翻转。两个输出端信号相反,可以满足不同需求。

(32)电位器

旋钮式电位器,其三个端子都通过插孔引出,可根据实验接成所需的各种方式。

(33)函数发生器

该单元采用8038集成电路芯片,可以产生方波、三角波、正弦波三种波形信号,其周期可以通过VR10调节。

(34)反相放大器

可以放大5倍或一倍,可做一般反相放大器使用(S21拨向左方),也可供8038函数发生器使用(S21拨向右方)。

(35)测温单元

采用AD590进行室温测量,输出与温度成正比的模拟电压信号。

(36)蜂鸣器

其输入信号通过插孔引入,输入高电平时蜂鸣器响。

(37)F/V变换器

将频率信号转换为电压信号,可以用来将电机速度信号转换成模拟电压信号。

2. 系统资源分配

地址芯片(模块)

0000H——1FFFH 6264

2000H——2003H 8255

2010H——2013H 8253

2020H——2021H 8279

2030H——2037H ADC0809

2040H DAC0832

2060H——2061H 8251

2070H——2073H RT12864

4000H 74LS573(简单I/O输出锁存电路)

4010H 74LS541(简单I/O输入电路)

6000H DS12887

8000H CAN总线

3. 选择开关定义

实验箱放置了若干选择开关,在作相关项目的实验时首先将选择开关拨在合适位置。

开关 位置 功能

左 EA=0 S1 右 EA=1 左 11.0592MHz S2 右 6 MHz 左 上电复位 S3 右 看门狗复位 左 I/O 口管理 S5 右 8279管理 左 I/O 口管理 S6 右 8279管理 上 +5V S7 下 +2.5V 上 1 S8——S15 下 0

左 RT12864工作在串行方式 S16——S18

右 RT12864工作在并行方式 左 RT12864工作在并行方式 S19 右 RT12864工作在串行方式

左 LCD 指示灯亮 S20 右 LCD 指示灯灭 左 反相放大5倍 S21

反相放大1倍

4. 扩展电缆连接器引脚定义

4.1 RS232接口DB9/F

4.2总线扩展接口IDC26

4.3CPLD 编程调试JTAG接口 IDC10

4.4微型打印机接口DB25/M

5. 仿真环境简介

见附录。

第二章 软件实验

实验一、实验系统认识及操作

【实验目的】

1.认识实验系统组成。

2.熟悉仿真器的使用方法。

3.学习51微控制器汇编语言的寻址方式。

【实验设备】

1.PⅣCPU/128内存/60G硬盘计算机 一台

2.微控制器原理及接口技术实验系统 一台

【实验原理】

51微控制器具有丰富的指令系统,在进行汇编语言程序设计时,针对系统的硬件环境,数据的存放、传送、运算都要通过指令来完成。因此,学习汇编语言的寻址方式,了解如何寻找存放操作数的空间位置和提取操作数是十分必要的,它也是汇编语言程序设计中最基本的内容之一。

51微控制器的寻址方式有七种,初学者往往对寻址方式不能引起重视,尤其是对寄存器寻址和寄存器间接寻址两种方式的理解方面容易混淆,51微控制器对内部RAM的寻址体现了较大的灵活性,对不同的内存区域寻址方式也不同。通过本实验,使学生对内部RAM的寻址加深印象,熟练掌握。

【实验内容及要求】

1.根据程序,理解指令含义,指出各存储单元的内容及寻址方式。

2.单步运行程序,逐条检查内容是否正确并记录。

3.设断点运行程序,检查结果是否正确并记录。

【实验步骤】

1.打开计算机[开始 | 程序 | 星研集成环境软件 | 选择仿真器:Super Ice51s| 确定]。

2.[选择公司:ATMEL | 选择CPU:89C51 | 设置P2.0~P2.7为A8~A15 | 设置P3.6为

/WR,P3.7为/RD | 下一步]。

3.[使用哪几种语言:Intel 的ASM51、PL/M51 | 下一步]。最后进入“星研电子-Ice181”界面]。

4.文件建立:按照仿真器的使用方法,在编辑状态建立项目文件,建立汇编源文件。

a)执行[ 主菜单 | 文件 | 新建 ]

选择“创建项目文件”,在“项目文件名”中输入您的项目文件名,该目录名决定编译、

连接时生成的所有文件所在目录;该项目文件名决定最终生成的代码文件的名称。即如果项目文件名叫“Example”,则最后生成的代码文件为“Example.dob”、“Example.hex”等。“确定”后,进入下一步。

b)根据界面要求进行选择,进入船坞化窗口。

c)执行[ 主菜单 | 文件 | 新建 | 新建文件:文件名.ASM ] 然后在文件窗口输入源程序。

5.启动编译、连接:

对工作区窗项目视的“源文件”中所有模块文件编译,如果没有错误,再与“库文件”中所有库文件连接,生成代码文件(DOB、HEX文件)。

执行[ 主菜单 | 项目 | 编译、连接]或[主菜单 | 项目 | 重新编译、连接](在工作区窗的项目视中按鼠标右键,系统弹出一个菜单,选择“编译、连接”或“重新编译连接”)。“编译连接”与“重新编译、连接”区别:“重新编译、连接”不管项目中有无添加、删除模块文件、编译软件是否变化、编译控制项有无修改、模块文件有无修改,对“源文件”中所有模块文件编译,如果没有错误,再与“库文件”中所有库文件连接,生成代码文件(DOB、HEX文件)。

编译、连接过程中产生的信息显示在信息窗的“建立”视中。如有错误、警告信息,用鼠标左键双击错误、警告信息或将光标移到错误、警告信息上,回车,系统自动打开对应的出错文件,并定位于出错行上。

6.进入调试状态:

在进入调试状态以前,请正确设置通信口:

执行[ 主菜单 | 辅助 | 通信]:选择串口1;SUPER ICE51S使用串口通信时,波特率可以选择115200,通常,选择缺省,仿真器会自动选择一个合适的波特率,用于仿真器与计算机之间的通信。

如果编译、连接正确后,进入调试状态方法:点击运行工具条的。

在信息窗的“装载”视中,显示装载的代码文件,装载的字节数,装载完毕后,显示启始地址,结束地址。

装载完毕后,根据实验内容要求,使用运行工具条的各种命令调试程序,记录结果。【实验报告要求】

1.通过实验归纳:对内部RAM(00~1FH)单元,可采用那些寻址方式?

2.对内部RAM(20~2FH)单元,可采用那些寻址方式?

3.对内部RAM(30~7FH)单元,可采用那些寻址方式?

4.对特殊功能寄存器(或称专用寄存器)只能用哪种寻址方式?

5.51微控制器的指令系统的寻址方式有哪7种方式?

【实验参考程序】

O RG 0000H ;单元 内容 寻址方式

M1: MOV PSW,#08H ;(PSW)=

MOV SP,#60H ;(SP)=

MOV TL0,#3CH ;(Tl0)=

MOV TH0,#0B0H ;(TH0)=

NOP

ORG 0020H ;单元 内容 寻址方式

M2: MOV A,SP ;(A)=

MOV A,TL0 ;(A)=

MOV A,TH0 ;(A)=

NOP

;对于内部RAM(00~1FH)单元:

ORG 0040H ;单元 内容 寻址方式 M3: MOV R0,#07H ;(R0)=

MOV @R0,#55H ;(07H)=

MOV R7,#66H ;(07H)=

MOV 07H,#77H ;(07H)=

NOP

;对于内部RAM(20~2FH)单元:

ORG 0060H ;单元 内容 寻址方式 M4: MOV R0,#20H ;(R0)=

MOV @R0,#01H ;(20H)=

MOV 20H.#02 ;(20H)=

SETB 20H.2 ;(20H)=

SETB 01H ;(20H)=

NOP

;对于内部RAM(30~7FH)单元:

ORG 0080H ; 单元 内容 寻址方式 M5: MOV R0,#40H ;(R0)=

MOV @R0,#0AAH ;(40H)=

MOV 40H,#0BBH ;(40H)=

NOP

END

ORG 00A0H ; 单元 内容 寻址方式 M6: SJMP L1 ;(PC)=

NOP ;(PC)=

NOP ;(PC)=

L1: JZ L3

MOV A,#0FFH

L2: SJMP L2

NOP

END

实验二、RAM数据传送程序设计

【实验目的】

1.学习51微控制器汇编语言的编写。

2.了解51微控制器 RAM的读写及调试方法。

【实验设备】

1.PⅣ主机/128内存/60G硬盘计算机 一台

2.微控制器原理及接口技术实验系统 一台

【实验原理】

51微控制器片内RAM低128字节(00H~7FH)包含工作寄存器区(00H~1FH)、位操作区(20H~2FH)和数据区(30~7FH)。对该128字节的RAM区,均可采用直接寻址和间接寻址方式,若采用间接寻址用R0或R1作间址寄存器。特殊功能寄存器占用片内RAM地址空间 80H~FFH,对它只能采用直接寻址方式。采用16位数据指针DPTR作间址寄存器,可寻址64KB的RAM 和I/O接口。

数据传送指令是汇编语言程序设计的基本要素,数据块传送也是程序设计的基本技巧之一。编写数据块传送程序,重点要掌握数据指针R0或R1以及DPTR的使用。

【实验内容及要求】

1.试编写程序:把内部RAM的(30H~7FH)单元清零。

2.试编写程序:用数据传送指令将片内RAM地址50H~5FH中的内容置成00H~0FH,然后将其中的内容传送到外部RAM地址1000H~100FH中,最后再将外部RAM地址1000H~100FH中的内容传回内部RAM地址中。

3.试编写程序:求n2(0≤n≤9),并将结果送RAM的地址30H中。

【实验步骤】

1.打开计算机,进入星研集成环境软件,按照仿真器的使用方法,在编辑状态建立项目文件,建立汇编源文件。

2.启动编译、连接:执行[ 主菜单 | 项目 | 编译、连接]或[主菜单 | 项目 | 重新编译、连接](在工作区窗的项目视中按鼠标右键,系统弹出一个菜单,选择“编译、连接”或“重新编译连接”)。

3.进入调试状态:设置通信口,然后执行[ 主菜单 | 运行 | 进入调试状态]或点击运

行工具条的。

4.用单步、设置段点及连续的方式运行程序1,检查(30H~7FH)单元程序运行前后的变化。

5.用单步、设置段点及连续的方式运行程序2,检查(50H~5FH),(1000H~100FH),(60H~6FH)单元程序运行前后的变化。

6.在运行程序3前,要通过键盘给A累加器赋值(直接在寄存器窗口修改即可),然后运行程序,观察(30H)单元中的内容。

【实验报告要求】

1.画出程序框图,整理实验程序程序。

2.如果把程序1中(30H~7FH)单元的内容改为55H,如何修改程序。

3.如果把程序2中(50H~5FH),(1000H~100FH),(60H~6FH)单元的内容改为0FFH,如何修改程序。

4.如果把程序3中求n2改为求n3,分析会出现什么结果?

5.分析微控制器存储器的地址空间分配,并画出简图。

6.理解数据指针:数据块传送若在内部RAM中进行,用什么作数据指针?若在外部RAM 或ROM中进行,用什么作数据指针?

7.存储器和数据存储器的地址空间可以重叠,对此如何解释?

【实验参考程序】

程序1:内部RAM清零

ORG 0000H

CLEAR: MOV R0,#30H ;30H送R0寄存器

MOV R6,#4FH ;4FH送R6寄存器(计数) CLR1: MOV A,#00H ;00送累加器A

MOV @R0,A ;00送到30H-7FH单元

INC R0 ;R0加1

DJNZ R6,CLR1 ;不到4F个字节再清 WAIT: LJMP WAIT

END

程序2:数据传送

ORG 0000H

MAIN: MOV R0,#50H

MOV R7,#10H

MOV A,#00H

A1: MOV @R0,A

INC A

INC R0

DJNZ R7,A1

MOV R0,#50H

MOV DPTR,#1000H

MOV R7,#10H

A2: MOV A,@R0

MOVX @DPTR,A

INC R0

INC DPTR

DJNZ R7,A2

MOV R0,#60H

MOV DPTR,#1000H

MOV R7,#10H

A3: MOVX A,@DPTR

MOV @R0,A

INC R0

INC DPTR

DJNZ R7,A3

HERE: AJMP HERE

END

程序3:计算N的平方

ORG 0000H

MOV DPTR,#1000H

MOVC A,@A+DPTR

MOV 30H,A

ORG 1000H

TABEL: DB 00,01,04,09,16

DB 25,36,49,64,81

NOP

END

实验三、算术运算程序设计

【实验目的】

1.学习微控制器算术运算、逻辑运算等指令。

2.练习其指令的使用和编程方法。

【实验设备】

1.PⅣ主机/128内存/60G硬盘计算机 一台

2.微控制器原理及接口技术实验系统 一台

【实验原理】

微控制器具有较强的加、减、乘、除等数学运算功能,这些运算可直接对8位无符号二进制数进行运算。利用溢出标志,还可以把加、减法运算用于有符号数的运算;用十进制调整指令,又可使运算直接用十进制(BCD码)来进行。应用算术运算指令要注意使用条件,要靠灵活运用指令,进行适当的编程才能得到正确结果。

【实验内容及要求】

1.试编写多字节十进制加法程序:入口参数:R0—加数首地址;R1—被加数首地址;R2—字节数;出口参数:R0—和首地址。

2.试编写八位带符号数加法:入口参数:R0—加数地址;(R0)+1—被加数地址;出口参数:R1、(R1)+1—和地址。运行程序,观察OV标志。若OV=1说明有溢出。反复实验,找出规律,如何避免溢出。

3.试编写双字节无符号整数相乘程序:入口参数:(R2R3)被乘数;(R6R7)乘数;出口参数:(R4R5R6R7)乘积。

【实验步骤】

1.打开计算机,进入星研集成环境软件,建立项目文件,建立汇编源文件;启动编译、连接;进入调试状态。

2.据实验内容要求,在寄存器窗口分别将R0、R1、R2置成20、30、02;在片内数据区(20H~21H),(30H~31H)单元分别置入加数和被加数,用连续或单步的方式运行程序1,检查程序及结果是否正确。

3.据实验内容要求,在寄存器窗口将R0置成50,将R1置成60,在片内数据区(50H、51H)单元分别置入有符号的加数和被加数,用连续或单步的方式运行程序2,检查程序及结果是否正确。(编程时,借助R2和R3两个寄存器放置两个加数的高八位,先令其为全0,即先假定两个加数为正数,然后判别符号位,再决定是否要将8位改为FFH)。

4.实验内容要求,在寄存器窗口分别给R2R3和R6R7设置数据,运行程序3,检查程序及结果是否正确。

【实验报告要求】

1.画出程序框图,整理实验程序。

2.若进行多字节二进制加法,程序1应如何修改?编写程序,并运行验证。

3.若进行多字节二进制减法,程序1应如何修改?编写程序,并运行验证。

4.每一实验程序做出3到5组实验数据,验证实验程序及结果是否正确,并记录。

【实验参考程序】

程序1:多字节十进制加法程序

ORG 0030H

CLR C

LOOP: MOV A,@R0 ;取低位加数

ADDC A,@R1 ;低位相加

DA A ;调整

MOV @R0,A ;低位和送R0地址

INC R0

INC R1

DJNZ R2,LOOP

NOP

END

程序2:八位带符号数加法

ORG 0040H

MOV R2,#0 ;高8位先设为0

MOV R3,#0

MOV A,@R0 ;取第一个加数

JNB ACC.7,LOOP1 ;是正数转移N1

MOV R2,#0FFH ;是负数高8位为全1 LOOP1: INC R0 ;修改R0指针

MOV B,@R0 ;取被加数到B

JNB B.7,LOOP2 ;是正数转移N2

MOV R3,#0FFH ;是负数高8位为全1 LOOP2: ADD A,B ;低8位相加

MOV @R1,A ;存放低8位

INC R1 ;修改R1指针

MOV A,R2 ;准备加高8位

ADDC A,R3 ;高8位相加

MOV @R1,A ;高8位和

NOP

END

程序3:双字节无符号整数相乘程序

ORG 0000H

QKUL: MOV A,R3

MOV B,R7

MUL AB ;R3*R7

XCH A,R7 ;R7=(R3*R7)的低字节

MOV R5,B ;R5=(R3*R7)的高字节

MOV B,R2

MUL AB ;R2*R7

ADD A,R5

MOV R4,A

CLR A

ADDC A,B

MOV R5,A ;R5=(R2*R7)的高字节

MOV A,R6

MOV B,R3

MUL AB ;R3*R6

ADD A,R4

XCH A,R6

XCH A,B

ADDC A,R5

MOV R5,A

MOV PSW.5,C ;存CY

MOV A,R2

MUL AB ;R2*R6

ADD A,R5

MOV R5,A

CLR A

MOV ACC.0,C

MOV C,PSW.5 ;加上一次加法的进位.

ADDC A,B

MOV R4,A

SJMP $

END

实验四、数据处理程序设计

【实验目的】

1.学习数据检索的方法和程序设计技巧。

2.学习数据交换及逻辑运算指令的使用。

3.学习数据比较指令的使用,熟悉冒泡法排序编程。

【实验设备】

1.PⅣ主机/128内存/60G硬盘计算机 一台

2.微控制器原理及接口技术实验系统 一台

【实验原理】

实际应用当中,多数情况下在进行核心算法之前,要进行数据准备,比如数据检索;按某种规律将一组数据排序;有时还要将一个字节的8位数据打乱,按某种规律重新排序。当然数据传送也是一种准备,诸多方式的数据准备统称为数据处理。

数据检索:指在数据区查找关键字的操作。

数据排序:数据排序的方法很多,本实验以冒泡法为例。所谓冒泡法是一种相邻数据互换的排序方法,其过程类似水中汽泡上浮。此方法排序效率较高。

【实验内容】

1.试编写程序:关键字检索。将实验数据存入50H单元开始的内存区,数据长度存入60H 单元,关键字存入61H单元,检索到关键字后,62H单元存入关键字所在的地址;若未检索到,则62H单元内容置0。

2.试编写程序:拼字程序。把30H,31H单元的低位内容合并成一个字节,送70H单元。本程序一般用在读显示缓冲区。

3.试编写程序:数据排序。用冒泡法将RAM 中几个单字节无符号整数,按照从小到大的次序重新排列。R0-数据区首址指针;R2-字节数。

4.试编写程序:单字节8位数据反序排列。将八位二进制数放入A累加器中,原顺序为D7~D0,排序后顺序为D0~D7;结果存入寄存器R6中。

【实验步骤】

1.根据实验内容要求,在片内数据窗口分别置入不同的数据,运行程序1,查看程序及结果是否正确。

2.根据实验内容要求,在片内数据窗口分别置入不同的数据,运行程序2,查看程序

及结果是否正确。

3.根据实验内容要求,在特殊寄存器窗口和片内数据窗口分别置入不同的数据,运行程序3,然后检查置入的数据是否按照从小到大排列。

4.根据实验内容要求,在特殊寄存器窗口,将A累加器赋值,运行程序4,观察程序及结果是否正确。

【实验报告要求】

1.画出程序框图,整理实验程序。

2.每一实验程序做出3到5组实验数据,验证实验程序及结果是否正确,并记录。

3.修改程序4,把50H-5AH 中的数据从大到小排列,如何编写程序。

【实验参考程序】

程序1:关键字检索程序:

ORG 0000H

MOV R0,#50H

MOV R1,60H

LOOP: MOV A,@R0

CJNE A,61H,LOOP1

MOV 62H,R0

SJMP HERE

LOOP1: INC R0

DJNZ R1,LOOP

NEXT: MOV 62H,#00H

HERE: SJMP HERE

END

程序2:拼字程序

ORG 0100H

PZCX: MOV A,30H ;读30H单元内容到A

ANL A,#0FH ;屏蔽了A的高位

SWAP A ;高低位交换

MOV B,A ;暂时存放在B中

MOV A,31H ;读31H的内容到A

ANL A,#0FH ;屏蔽了A的高位

ORL A,B ;A和B进行或操作

MOV DPTR,#8000H ;

MOVX @DPTR,A ;结果送入8000H

WAIT: SJMP WAIT

END

程序3:数据排序

ORG 0200H

START: MOV R3,#50H

MOV R7,#0AH

CLR F0

LOOP: MOV A,@R0

MOV 2BH,A ; 前数送2BH单元

INC R0

MOV 2AH,#@R0 ;后数送2AH单元

CLR C

SUBB A,@R0

JC NEXT ;前数小于后数不换

MOV @R0,2BH ;前数送后单元

DEC R0

MOV @R0,2AH ;后数送前单元

INC R0

SETB F0 ;F0=1 互换

NEXT: DJNZ R7,LOOP

JB F0,START

HEAR: SJMP HEAR

程序4:单字节8位数据反序排列

ORG 0300H

MOV R7,A

MOV R2,#08H

LOOP: MOV A,R7

RLC A

MOV R7,A

MOV A,R6

RRC A

MOV R6,A

DJNZ R2,LOOP

NOP

END

实验五、数制转换程序设计

【实验目的】

1.学习ASCII码与十六进制互换算法及程序设计方法。

2.学习十六进制与BCD码互换算法及程序设计方法。

【实验设备】

1.PⅣ主机/128内存/60G硬盘 一台

2.微控制器原理及接口技术实验系统 一台

【实验原理】

人们在日常生活中习惯使用十进制,而计算机键盘和显示常采用二进制编码的十进制数(即BCD码)或ASCII码。因此各种代码之间的转换是回避不了的。学习程序设计就应该掌握数字之间的转换。

1.十六进制数与ASCLL码的转换依据下面对应关系进行:

十六进制数 0 1 2 …… 9 A B …… F

ASCLL码 30 31 32 ...... 39 41 42 (46)

2.单字节16进制数转换成10进制数,依据的算法是:将16进制数除以100,商作百位数,将余数除以10,商作十位数,余数机是个位数。

【实验内容】

1.多位十六进制数转换成ASCII码:入口参数:R0十六进制数地址指针;R2字节数;出口参数:(R1)转换后ASCII码的地址指针。

西南科技大学单片机原理实实验四及代码

2.1 实验四中断实验 一、实验目的 加深对MCS-51单片机中断系统基础知识的理解。 二、实验设备 Keil C单片机程序开发软件。 Proteus仿真软件 DP51-PROC单片机综合实验仪。 三、实验内容和步骤 内容: 利用外部中断输入引脚(以中断方式)控制步进电机的转动。要求:每产生1次中断,步进电机只能步进1步。 实验程序: 使用INT0的中断服务程序控制步进电机正向步进;使用INT1中断服务程序控制步进电机反向步进。 设计思路: ①主程序在完成对INT0和INT1的设置后,可进入死循环(等待中断请求)。 ②为便于实验观察和操作,设INT0和INT1中断触发方式为边沿。 ③步进电机的转动控制由外部中断的服务程序来实现。 ④当前步进电机的相位通电状态信息可以使用片内RAM中的一个字节单元来存储。 设计参考: ①主程序需要设置的中断控制位如下: IT0和IT1 外部中断触发方式控制 0=电平 1=边沿(下降沿) EX0和EX1 外部中断允许控制0=屏蔽 1=允许 PX0和PX1 中断优先级级别控制0=低级 1=高级 在同级别(PX0=PX1)时INT0的优先级高于INT1 EA 中断允许总控制0=屏蔽 1=允 许 ②外部中断服务程序的入口地址: 0003H 外部中断0 0013H 外部中断1 预习: 1)编写好实验程序。 2)根据编写的程序和实验步骤的要求制定调试仿真的操作方案。

实验单元电路: 1) 步进电机驱动电路。 步进电机共有4相,当以A →B →C →D →A →B …的顺序依次通电时,电机就会正转,若按相反的顺序依次通电,电机就会反转。每顺序切换一相(1步),电机旋转18°,切换的频率决定电机的转速(切换的频率不能超过电机的最大响应频率)。根据图 2.4中的电路,当BA (插孔)输入为高时,对应的A 相通电。 2) SW 电路 开关SW X 拨在下方时,输出端SWX 输出低电平,开关SW X 拨在上方时,输出端SWX 输出高电平。其中SW1和SW3具备消除抖动电路,这样,SW1或SW3每上下拨动一次,输出端产生单一的正脉冲(上升沿在前,下降沿在后)。 3) LED 和KEY 电路 步骤: 1) 在S : \ STUDY \ Keil 文件夹中新建Ex04文件夹(该文件夹用于保存本次实验的所 有内容),通过网上邻居将服务器上本次实验共享文件夹下的所有文件拷贝到S : \ STUDY \ Keil \ Ex04文件夹中。 2) 在Keil C 中创建一个新工程,新工程保存为S : \ STUDY \ Keil \ Ex04\Ex04.uv2,然 后选择单片机型号为Generic 中的8051。 图2.5 单脉冲电路原理图 +5V +5V 图2.4 步进电机驱动电路原理图 LED1 LED8 +5V 8 图2.6 LED 和KEY 电路 +5V 8

51单片机实例程100讲全集

目录 目录 (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 (15) 实例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:用数组作函数参数控制流水花样 (22) 实例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) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

51单片机实验报告94890

《单片机与接口技术》实验报告 信息工程学院 2016年9月

辽东学院信息技术学院 《单片机与接口技术》实验报告 姓名:王瑛 学号: 0913140319 班级: B1403 专业:网络工程 层次:本科 2016年9月

目录 实验题目:实验环境的初识、使用及调试方法(第一章) 实验题目:单片机工程初步实验(第二章) 实验题目:基本指令实验(第三章)4 实验题目:定时器/计数器实验(第五章)4 实验题目:中断实验(第六章)4 实验题目:输入接口实验(第八章)4 实验题目:I/O口扩展实验(第九章)4 实验题目:串行通信实验(第十一章)4 实验题目:A/D,D/A转换实验(第十七章)4

实验题目:实验环境的初识、使用及调试方法实验 实验类型:验证性实验课时: 1 时间:2016年10月24日 一、实验内容和要求 了解单片机的基础知识 了解51单片机的组成和工作方法 掌握项目工程的建立、编辑、编译和下载的过程方法 熟练单片机开发调试工具和方法 二、实验结果及分析 单片机最小系统的构成: Keil集成开发环境:

STC-ISP:

实验题目:单片机工程初步实验 实验类型:验证性实验课时: 1 时间:2016 年10 月24 日一、实验内容和要求 点亮一个LED小灯 程序下载到单片机中 二、实验结果及分析 1、点亮一个LED小灯 点亮LED小灯的程序: #include //包含特殊功能寄存器定义的头文件 sbit LED = P0^0; sbit ADDR0 = P1^0; //sbit必须小写,P必须大写 sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; void main() { ENLED = 0; ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; LED = 0; //点亮小灯 while (1); //程序停止 } 2、程序下载 首先,我们要把硬件连接好,把板子插到我们的电脑上,打开设备管理器查看所使用的COM 口,如图所示:

51单片机20个实验-代码详细

第一章单片机系统板说明 一、概述 单片机实验开发系统是一种多功能、高配置、高品质的MCS-51单片机教学与开发设备。适用于大学本科单片机教学、课程设计和毕业设计以及电子设计比赛。 该系统采用模块化设计思想,减小了系统面积,同时增加了可靠性,使得单片机实验开发系统能满足从简单的数字电路实验到复杂的数字系统设计实验,并能一直延伸到综合电子设计等创新性实验项目。该系统采用集成稳压电源供电,使电源系统的稳定性大大提高,同时又具备完备的保护措施。为适应市场上多种单片机器件的应用,该系统采用“单片机板+外围扩展板”结构,通过更换不同外围扩展板,可实验不同的单片机功能,适应了各院校不同的教学需求。 二、单片机板简介 本实验系统因为自带了MCS-51单片机系统,因此没有配置其他单片机板,但可以根据教学需要随时配置。以单片机板为母板,并且有I/O接口引出,可以很方便的完成所有实验。因此构成单片机实验系统。 1、主要技术参数 (1)MSC-51单片机板 板上配有ATMEL公司的STC89C51芯片。 STC89C51资源:32个I/O口;封装DIP40。 STC89C51开发软件:KEIL C51。 2、MSC-51单片机结构 (1)单片机板中央放置一块可插拔的DIP封装的STC89C51芯片。 (2)单片机板左上侧有一个串口,用于下载程序。 (3)单片机板的四周是所有I/O引脚的插孔,旁边标有I/0引脚的脚引。 (4)单片机板与各个模块配合使用时,可形成—个完整的实验系统。 三、母板简介 主要技术参数 (1)实验系统电源 实验系统置了集成稳压电源,使整个电源具有短路保护、过流保护功能,提高了实验的稳定性。 主板的右上角为电源总开关,当把220V交流电源线插入主板后,打开电源开关,主板

51单片机新手入门实例详解

51单片机新手入门实例详解 1.硬件和软件准备 ●实验系统:EL89C单片机学习开发系统一套 ●电脑:具有标准串口的台式机或笔记本电脑,如果没有串口也可购 买一条USB转串口线代替 ●工具软件:Keil uVision2(用于编写和编译源程序、仿真调试); 光盘上非安装烧写软件,路径 \单片机EL89C\EL89C光盘\STC52单片机下载程序\stc-isp-v4.79-not-setup\STC_ISP_V483.exe (EL89C的编程控制烧写软件) 2.源程序编写和编译 EL89C的8个发光二极管负极通过限流电阻接入单片机的P1.0~P1.7端口,下面的范例程序可以使这8个发光二极管轮流点亮,形成流水灯效果。 我们使用的开发工具是Keil C51,是目前世界上最优秀、最强大的51单片机应用平台之一,它集编辑、编译、仿真调试于一体,支持汇编、C语言以及混合编程。同时具备功能强大的软件仿真和硬件仿真功能。 下面以一个简单的流水灯程序为例子来介绍Keil C51的使用方法: 2.1首先在硬盘上建立一个文件夹,命名为ledtest(当然可以是其他名字), 为方便程序的编写和调试,我们将调试过程中产生的文件都将放在这个目录中。 2.2启动Keil软件,点击菜单project,选择new project,然后选择你要保 存的路径,输入工程文件的名字,我们现在保存到刚才建立的ledtest目录中,工程文件命名为ledtest,然后点击保存。 2.3这时会弹出下面的对话框Select Device for Target,要求你为刚才的项 目选择一个CPU。我们选择Atmel的AT89C52,如图所示,选择AT89C52之后,右边一栏是对这个单片机的基本的说明,然后点击确定。

单片机实验报告书

并行I/O接口实验 一、实验目的 熟悉掌握单片机并行I/O接口输入和输出的应用方法。 二、实验设备及器件 个人计算机1台,装载了Keil C51集成开发环境软件。https://www.doczj.com/doc/d77194548.html,单片机仿真器、编程器、实验仪三合一综合开发平台1台。 三、实验内容 (1)P1口做输出口,接八只发光二极管,编写程序,使发光二极管延时(0.5-1秒)循环点亮。实验原理图如图3.2-1所示。 图3.2-1单片机并行输出原理图 实验程序及仿真 ORG 0000H LJMP START ORG 0100H START:MOV R2,#8 MOV A,#0FEH LOOP:MOV P1,A LCALL DELAY RL A

DJNZ R2,LOOP LJMP START DELAY:MOV R5,#20 D1:MOV R6,#20 D2:MOV R7,#248 D3:DJNZ R7,D3 DJNZ R6,D2 DJNZ R5,D1 RET END 中断实验 一、实验目的 熟悉并掌握单片机中断系统的使用方法,包括初始化方法和中断服务程序的编写方法。 二、实验设备及器件

个人计算机1台,装载了Keil C51集成开发环境软件。 https://www.doczj.com/doc/d77194548.html,单片机仿真器、编程器、实验仪三合一综合开发平台1台。 三、实验内容 (2)用P1口输出控制8个发光二极管LED1~LED8,实现未中断前8个LED闪烁,响应中断时循环点亮。 实验程序及仿真 ORG 0000H LJMP MAIN ORG 0003H LJMP INT00 ORG 0010H MAIN: A1:MOV A,#00H MOV P1,A MOV A,#0FFH MOV P1,A SETB EX0 JB P3.2,B1 SETB IT0 SJMP C1 B1:CLR IT0 C1:SETB EA NOP SJMP A1 INT00:PUSH Acc PUSH PSW MOV R2,#8 MOV A,#0FEH LOOP: MOV P1,A LCALL DELAY RL A DJNZ R2,LOOP

51单片机中断系统详解

的定时器中断后便认为是1s,这样便可精确控制定时时间啦。要计50000个数时,TH0和TL0中应该装入的总数是65536-50000=15536.,把15536对256求模:15536/256=60装入TH0中,把15536对256求余:15536/256=176装入TL0中。 以上就是定时器初值的计算法,总结后得出如下结论:当用定时器的方式1时,设机器周期为T CY,定时器产生一次中断的时间为t,那么需要计数的个数为N=t/T CY ,装入THX和TLX中的数分别为: THX=(65536-N)/256 , TLX=(65536-N)%256 中断服务程序的写法 void 函数名()interrupt 中断号using 工作组 { 中断服务程序内容 } 在写单片机的定时器程序时,在程序开始处需要对定时器及中断寄存器做初始化设置,通常定时器初始化过程如下: (1)对TMOD赋值,以确定T0和 T1的工作方式。 (2)计算初值,并将初值写入TH0、TL0或TH1、TL1。 (3)中断方式时,则对IE赋值,开放中断。 (4)使TR0和TR1置位,启动定时器/计数器定时或计数。 例:利用定时器0工作方式1,实现一个发光管以1s亮灭闪烁。 程序代码如下: #include #define uchar unsigned char #define uint unsigned int sbit led1=P1^0; uchar num; void main() { TMOD=0x01; //设置定时器0位工作模式1(M1,M0位0,1) TH0=(65536-45872)/256; //装初值11.0592M晶振定时50ms数为45872 TL0=(65536-45872)%256; EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 while(1) { if(num==20) //如果到了20次,说明1秒时间 { led1=~led1; //让发光管状态取反 num=0; } } } void T0_time()interrupt 1

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

51单片机数字电压表实验报告

微控制器技术创新设计实验报告 姓名:学号:班级: 一、项目背景 使用单片机AT89C52和ADC0808设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示。在单片机的作用下,能监测两路的输入电压值,用8位串行A/D转换器,8位分辨率,逐次逼近型,基准电压为 5V;显示精度伏。 二、项目整体方案设计 ADC0808 是含8 位A/D 转换器、8 路多路开关,以及与微型计算机兼容的控制逻辑的CMOS组件,其转换方法为逐次逼近型。ADC0808的精度为 1/2LSB。在AD 转换器内部有一个高阻抗斩波稳定比较器,一个带模拟开关树组的256 电阻分压器,以及一个逐次通近型寄存器。8 路的模拟开关的通断由地址锁存器和译码器控制,可以在8 个通道中任意访问一个单边的模拟信号。

三、硬件设计 四、软件设计#include<> #include""

#define uchar unsigned char #define uint unsigned int sbit OE = P2^7; sbit EOC=P2^6; sbit START=P2^5; sbit CLK=P2^4; sbit CS0=P2^0; sbit CS1=P2^1; sbit CS2=P2^2; sbit CS3=P2^3; uint adval,volt; uchar tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; void delayms(uint ms) {

51单片机中断系统编程

51单片机中断系统编程 51单片机中断系统编程 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆中断是指如下过程(如下图所示):CPU 与外设同时工作,CPU执行主程序,外设做准备工作。当外设准备好时向CPU发中断请求信 号,若条件满足,则CPU终止主程序的执行,转去执行中断服务程序。在中断服务程序中 CPU与外设交换信息,待中断服务程序执行完后,CPU再返回刚才终止的主程序继续执行。 5.3.1 中断系统 MCS-51单片机提供了5个固定的可屏蔽中断源,3个在片内,2个在片外,它们在程序存储 器中各有固定的中断入口地址,由此进入中断服务程序。5个中断源的符号、名称及产生 的条件如下。 ? INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。 ? INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。 ? T0:定时器/计数器0中断,由T0计数溢出引起。 ? T1:定时器/计数器l中断,由T1计数溢出引起。 ? TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。 中断源有两级中断优先级,可形成中断嵌套。两个特殊功能寄存器用于中断控制和条件设 置。整个中断系统的结构框图如图所示。 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆 中断系统结构框图 2 中断系统的控制寄存器 中断系统有两个控制寄存器(IE和IP),它们分别用来设定各个中断源的打开/关闭和中

断优先级。此外,在TCON中另有4位用于选择引起外部中断的条件并作为标志位。 (1)中断允许寄存器IE IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H-AFH。IE 用 来打开或关断各中断源的中断请求,基本格式如下: 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆 ? EA:全局中断允许位。EA=0,禁止一切中断;EA=1,打开全局中断控制,此时,由各 个中断控制位确定相应中断的打开或关闭。 ? ×:无效位。 ? ES:串行I/O中断允许位。ES=1,允许串行I/O中断;ES=0,禁止串行I/O中断。 ? ETl;定时器/计数器T1中断允许位。ETl=1,允许T1中断;ETl=0,禁止T1中断。 ? EXl:外部中断l中断允许位。EXl=1,允许外部中断1中断;EXl=0,禁止外部中断1中 断。 ? ET0:定时器/计数器T0中断允许位。ET0=1,允许T0中断;ET0=0,禁止TO中断。 ? EX0:外部中断0中断允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中 断。 (2)中断优先级寄存器IP IP在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H一BFH。 MCS-51单片机的中断分为两个优先级,IP用来设定各个中断源属于两级中断中的哪一级, 其基本格式如下: 上传的图片

51单片机流水灯实验报告

51单片机流水灯试验 一、实验目的 1.了解51单片机的引脚结构。 2.根据所学汇编语言编写代码实现LED灯的流水功能。 3.利用开发板下载hex文件后验证功能。 二、实验器材 个人电脑,80c51单片机,开发板 三、实验原理 单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。使用rl或rr a实现位的转换。 A寄存器的位经过rr a之后转换如下所示: 然后将A寄存器转换一次便送给P2即MOV P2,A便将转换后的数送到了P2口,不断循环下去,便实现了逐位置一操作。 四、实验电路图

五、通过仿真实验正确性 代码如下:ORG 0 MOV A,#00000001B LOOP:MOV P2,A RL A ACALL DELAY SJMP LOOP DELAY:MOV R1,#255 DEL2:MOV R2,#250 DEL1:DJNZ R2,DEL1 DJNZ R1,DEL2 RET End 实验结果:

六、实验总结 这次试验我通过Proteus仿真实现对流水灯功能的实现。受益匪浅,对80c51的功能和结构有了深层次的了解,我深刻的明白,要想完全了解c51还有一定距离,但我会一如既往的同困难作斗争。在实验中,我遇到了不少困难,比如不知道怎么将程序写进单片机中,写好程序的却总出错,不知道什么原因,原来没有生成hex文件。这些错误令我明白以后在试验中要步步细心,避免出错。

51单片机C语言编程基础与实例

基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) 代码

51单片机实验报告

51单片机实验报告

实验一 点亮流水灯 实验现象 Led灯交替亮,间隔大约10ms。实验代码 #include void Delay10ms(unsigned int c); void main() { while(1) { P0 = 0x00; Delay10ms(50); P0 = 0xff; Delay10ms(50); } }

void Delay10ms(unsigned int c) { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } 实验原理 While(1)表示一直循环。 循环体首先将P0的所有位都置于零,然后延时约50*10=500ms,接着P0位全置于1,于是LED全亮了。接着循环,直至关掉电源。延迟函数是通过多个for循环实现的。 实验2 流水灯(不运用库函数) 实验现象 起初led只有最右面的那一个不亮,半秒之后从右数第二个led

也不亮了,直到最后一个也熄灭,然后led除最后一个都亮,接着上述过程 #include #include void Delay10ms(unsigned int c); main() { unsigned char LED; LED = 0xfe; while (1) { P0 = LED; Delay10ms(50); LED = LED << 1; if (P0 == 0x00) { LED = 0xfe; } } } void Delay10ms(unsigned int c)

C51单片机实验报告

实验报告册 课程名称:单片机原理与应用B 指导老师:xxx 班级:xxx 姓名:xxx 学号:xxx 学期:20 —20 学年第学期南京农业大学工学院教务处印

实验目录实验一:指示灯/开关控制器 实验二:指示灯循环控制 实验三:指示灯/数码管的中断控制 实验四:电子秒表显示器 实验五:双机通信

姓名:学号:班级:成绩: 实验名称:指示灯/开关控制器 一、实验目的: 学习51单片机I/O口基本输入/输出功能,掌握C语言的编程与调试方法。 二、实验原理: 实验电路原理图如图所示,图中输入电路由外接在P1口的8只拨动开关组成;输入电路由外接在P2口的8只低电平驱动的发光二极管组成。此外,还包括时钟电路、复位电路和片选电路。 在编程软件的配合下,要求实现如下指示灯/开关控制功能:程序启动后,8只发光二极管先整体闪烁3次(即亮→暗→亮→暗→亮→暗,间隔时间以肉眼可观察到为准),然后根据开关状态控制对应发光二极管的亮灯状态,即开关闭合相应灯亮,开关断开相应灯灭,直至停止程序运行。 三、软件编程原理为; (1)8只发光二极管整体闪烁3次

亮灯:向P2口送入数值0; 灭灯:向P2口送入数值0FFH; 闪烁3次:循环3次; 闪烁快慢:由软件延时时间决定。 (2)根据开关状态控制灯亮或灯灭 开关控制灯:将P1口(即开关状态)内容送入P2口;无限持续:无条件循环。 四、实验结果图: 灯泡闪烁:

按下按键1、3、5、7:

经检验,其余按键按下时亦符合题目要求。 五、实验程序: #include"reg51.h" void delay(unsigned char time) { unsigned int j=15000; for(;time>0;time--) for(;j>0;j--); } void main(){ key,char i; for(i=0;i<3;i++) { P2=0x00; delay(500); P2=0xff; delay(500) } while(1) { P2=P3;

心率计51单片机代码.doc

#include "STC12C5A.h" #include "SMG.h" #define FSOC 24000000L #define T1MS (65536-FSOC/12/1000) sbit LED0 = P0^0; unsigned int count=0;计时标志数 unsigned int xinlv=0;心率计算器 unsigned char seg[10] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; sbit HC595_RST = P0^6; sbit HC595_SCK = P0^4; sbit HC595_RCK = P0^5; sbit HC595_DAT = P0^7;

外部中断代码void Exti0_Init() { IT0 = 1; //下降沿触发 TCON.0=1 EX0 = 1; //开外部中断0 IE.0=1 EA = 1; //开总中断 } void Exit0_ISR() interrupt 0 { Xinlv++; LED0=0; delay_ms(2); LED0=1; } 定时器代码void Timer0_Init() { TMOD = 0x01; TR0 = 1; //16位定时器工作方式 TH0 = T1MS>>8; TL0 = T1MS; ET0 = 1; //打开定时器0中断 EA = 1; //打开总中断 } void Timer0_ISR() interrupt 1 { unsigned int temp; count++; TH0 = T1MS>>8; TL0 = T1MS; if(count=5000) temp=Xinlv; for{} SMG_Display(temp); }

51单片机实验报告

实验一数据传送实验 实验内容: 将8031内部RAM 40H—4FH单元置初值A0H—AFH,然后将片内RAM 40H—4FH单元中的数据传送到片内RAM 50H—5FH单元。将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。 源程序清单: ORG 0000H RESET:AJMP MAIN ORG 003FH MAIN:MOV R0,#40H MOV R2,#10H MOV A,#0A0H A1:MOV @R0,A INC R0 INC A DJNZ R2, A1 MOV R1,#40H MOV R0, #50H MOV R2, #10H A3: MOV A, @R1 MOV @R0, A INC R0 INC R1 DJNZ R2, A3 LJMP 0000H 思考题: 1. 按照实验内容补全程序。 2. CPU 对8031内部RAM存储器有哪些寻址方式? 直接寻址,立即寻址,寄存器寻址,寄存器间接寻址。 3. 执行程序后下列各单元的内容是什么? 内部RAM 40H~4FH ___0A0H~0AFH______________________ 内部RAM 50H~5FH___0A0H~0AFH_______________________ 实验二多字节十进制加法实验

实验内容: 多字节十进制加法。加数首地址由R0 指出,被加数和结果的存储单元首地址由R1指出,字节数由R2 指出。将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。源程序清单:ORG 0000H RESET: AJMP MAIN ORG 0100H MAIN: MOV SP, #60H MOV R0, #31H MOV @R0, #22H DEC R0 MOV @R0, #33H MOV R1, #21H MOV @R1, #44H DEC R1 MOV @R1, #55H MOV R2, #02H ACALL DACN HERE: AJMP HERE DACN: CLR C DAL: MOV A, @R0 ADDC A, @R1 DA A MOV @R1, A INC R0 INC R1 DJNZ R2,DAL CLR A MOV ACC.0 , C RET 思考题: 1. 按照实验内容补全程序。 2. 加数单元、被加数单元和结果单元的地址和内容为? 3130H,2120H,6688H 3. 如何检查双字节相加的最高位溢出? 看psw.3 的溢出标志位ov=1 则溢出 4. 改变加数和被加数,测试程序的执行结果。 实验三数据排序实验

51单片机蜂鸣器奏乐实验汇编代码

LJMP START ORG 000BH INC 20H ;中断服务,中断计数器加1 MOV TH0,#0D8H MOV TL0,#0EFH ;12M晶振,形成10毫秒中断RETI START: MOV SP,#50H MOV TH0,#0D8H MOV TL0,#0EFH MOV TMOD,#01H MOV IE,#82H MUSIC0: NOP MOV DPTR,#DAT ;表头地址送DPTR MOV 20H,#00H ;中断计数器清0 MUSIC1: NOP CLR A MOVC A,@A+DPTR ;查表取代码 JZ END0 ;是00H,则结束 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3 MUSIC5:NOP MOV R6,A INC DPTR MOV A,#0 MOVC A,@A+DPTR MOV R7,A SETB TR0 MUSIC2:NOP CPL P3.2 MOV A,R6 MOV R3,A LCALL DEL MOV A,R7 CJNE A,20H,MUSIC2 MOV 20H,#00H INC DPTR LJMP MUSIC1 MUSIC3:NOP CLR TR0 MOV R2,#0DH

MOV R2,#0FFH LCALL DEL DJNZ R2,MUSIC4 INC DPTR LJMP MUSIC1 END0:NOP MOV R2,#0FFH MUSIC6:MOV R3,#00H LJMP MUSIC0 DEL:NOP DEL3:MOV R4,#02H DEL4:NOP DJNZ R4,DEL4 NOP DJNZ R3,DEL3 RET NOP DAT: DB 18H, 30H, 1CH, 10H DB 20H, 40H, 1CH, 10H DB 18H, 10H, 20H, 10H DB 1CH, 10H, 18H, 40H DB 1CH, 20H, 20H, 20H DB 1CH, 20H, 18H, 20H DB 20H, 80H, 0FFH, 20H DB 30H, 1CH, 10H , 18H DB 20H, 15H, 20H , 1CH DB 20H, 20H, 20H , 26H DB 40H, 20H , 20H , 2BH DB 20H, 26H, 20H , 20H DB 20H, 30H , 80H , 0FFH DB 20H, 20H, 1CH , 10H DB 18H, 10H, 20H , 20H DB 26H, 20H , 2BH , 20H DB 30H, 20H , 2BH , 40H DB 20H, 20H , 1CH , 10H DB 18H, 10H, 20H, 20H DB 26H, 20H , 2BH, 20H DB 30H, 20H, 2BH , 40H DB 20H, 30H, 1CH , 10H DB 18H, 20H , 15H , 20H DB 1CH, 20H , 20H , 20H DB 26H, 40H, 20H , 20H

51单片机信号发生器实验报告

微控制器技术创新设计实验报告姓名:学号:班级: 一、项目背景 信号发生器也叫做振荡器或是信号源,在现在的科技生产实践中有着广泛而重要的应用。现在的特殊波形发生器在价格上不够经济,有些昂贵。而基于AT89C51单片机的函数信号发生器可以满足此要求。根据傅里叶变换,各种波形均可以用三角函数的相关式子表示出来。函数信号发生器能够产生多种波形,如三角波、锯齿波、矩形波、方波和正弦波。 二、项目整体方案设计 可以利用单片机编程的方法来实现波形的输出。可选用AT89C51作为控制器,输出相应波形的数字信号,再用D/A 转换器输出相应波形的模拟信号。用DAC0832作为D/A转换器,再经过两级放大后输出,最终在示波器上显示。可以使用按键扫描来实现波形的变化

三、硬件设计 四、软件设计 #include #define uchar unsigned char #define uint unsigned int Const tab[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff ,0xff,0xff,0xff,0xff,0xff,0xff}; void delay(void) { uchar i; for(i=230;i>0;i--); }

void main() { uchar i; while(1) { for(i=0;i<18;i++) { P1=tab[i]; delay(); } } } 五、实验结果

六、项目总结 通过这次实验设计,锻炼我们综合运用知识,提出问题,分析问题,及解决问题的能力。我感慨颇多,在着手设计的这段日子里,我又学到了很多东西。特别是理论联系实际。我认为掌握单片机的应用及开发技术是最基本的也是必要的。单片机是以后从事相关嵌入式研发最为基本的入门芯片。所以学好单片机是我们电子类的必要任务。通过这次单片机课程设计的顺利完成,离不开付老师指导,也离不开班上同学的耐心帮助。在此,我对所有帮助过我的老师和同学表示我真挚的感谢!

基于51单片机的模数转换(AD)实验设计

HEFEI UNIVERSITY 单片机课程综述报告 主题基于51单片机的模数转换(A/D)实验设计姓名郭丽丽 专业通信工程 学号 1105021006 班级 11级通信(1)班 指导老师汪济洲 2014 年 6 月 2 日

目录 1.实验目的与要求 (1) 1.1实验目的 (1) 1.2实验要求 (1) 2.实验原理 (1) 2.1电路原理图 (1) 2.2 Proteus7.4 软件简介 (2) 3、实验步骤 (6) 4、源程序代码 (6) 5. 实验结果分析 (10) 6.总结 (10)

1.实验目的与要求 1.1实验目的 1.掌握A/D转换与单片机的接口方法 2.了解A/D芯片ADC0809转换性能及编程方法 3.通过实验了解单片机如何进行数据采集 1.2实验要求 1.采用查询法或中断法编程进行A/D采集; 2.采集0~5V范围的电压信号(以电位器模拟被测信号),使用4位串行数码管显示0~5V数值,小数点保留三位,实现简易电压表功能。 2.实验原理 2.1电路原理图 熟悉8051的输入输出端口的使用方法, 本实验的电路连接如图1所示。 图1 连接电路

2.2 Proteus7.4 软件简介 Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是: ①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。 ②支持主流单片机系统的仿真。目前支持的单片机类型有:ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。 ③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2、MPLAB等软件。 ④具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。 其操作界面如下图所示: 图2 Proteus操作页面

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.doczj.com/doc/d77194548.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 sbit LED=P1^0;// 用sbit 关键字定义LED到P1.0端口, //LED是自己任意定义且容易记忆的符号 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 LED=1; //将P1.0口赋值1,对外输出高电平 LED=0; //将P1.0口赋值0,对外输出低电平 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 2-IO输出-点亮1个LED灯方法2 /*-----------------------------------------------

名称:IO口高低电平控制 论坛:https://www.doczj.com/doc/d77194548.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用1个字节对单个端口赋值 P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉, //ff换算成二进制是1111 1111 P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮 //0xfe是16进制,0x开头表示16进制数, //fe换算成二进制是1111 1110 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 3-IO输出-点亮多个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.doczj.com/doc/d77194548.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的多个LED灯

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