山东大学单片机实验 (实验7)
最新3.山东大学单片机-答案

单片机原理-答案一、问答题1、利用MSC1211或8051设计应答方式下的多机通讯程序。
通讯参数:晶振为11.0592MHz,9600,n,8,1。
通讯过程如下:主机首先发送从机地址,从机收到地址后进行比较,如果地址相符,则将从机地址回发给主机作为应答信号。
主机收到从机的地址应答信号后,将内存单元中的120个数据发送给从机,并进行数据块校验(将各个数据进行异或),若校验正确,则从机发送00H给主机,否则发送0FFH给主机,主机重新发送数据。
(应在适当的地方加程序注释)解:主机程序如下:ORG 0000HLJMP MAINT ;跳至主程序入口地址ORG 0023H ;串行口中断服务程序入口LJMP INTSTMAINT:MOV SCON,#90H ;置工作方式2,并允许接收MOV TMOD,#20H ;置T1工作方式2MOV TH1,#0FDHMOV TL1,#0FDHMOV DPTR,#ADDR ;设置数据块首址ADDR的地址指针MOV R0,#120 ;设置发送字节数MOV R1,#00H ;设置校验和的初值MOV R2,#NAMESETB TB8 ;置位TB8位,作为发送地址桢信息特征SETB TR1SETB EA ;CPU开中断SETB ES ;允许串行口中断MOV A,R2 ;发送地址桢信息MOV SBUF,ASJMP $;中断服务程序INTST:MOV A,TB8 ;判断是发送地址还是数据,若为数据则转LOOP0CJNE A,01H,LOOP0CLR TI ;地址桢信息发送完后清发送中断LOOP0:JB RI,LOOP1 ;检查是否是接受中断?若RI=1则转入接受乙机发送应答信息CLR TI ;因RI=0,表明是甲机发送中断数据的中断请求。
CPU响应中断,在中断服务程序中应清中断标志MOV A,TB8;CJNE A,#01H,LOO3 ;若为发送数据中断则转LOOP3继续发送数据LJMP ENDT ;甲机发送一数据完毕跳至中断返回程序LOOP1:CLR RI ;清接受中断标志MOV A,TB8 ;判断是发送地址还是数据,若为数据则转LOOP2CJNE A,#01H,LOOP4;若TB8为0则接受的为乙机数据校验应答MOV A,SBUF ;取乙机的应答数据CJNE A,@R2,LOOP2 ;若乙机应答信息不是从机地址,则地址传送不正确,则转LOOP2程序重新发送地址信息,否则清TB8,发送数据CLR TB8LOOP3:MOVX A,@DPTR ;取下一个数MOV SBUF,A ;启动串行口,发送新的数据XRL A,@R1MOV @R1,AINC DPTR ;修改地址指针DEC R0 ;修改发送字节数记数值CJNE R0,#00H,ENDT ;判别120个字节数据都发送完没有。
山大单片机实验

单片机实验报告孙洪悦2011实验1:汇编程序实验1自我完成实验(1)实验内容将片内RAM 30H 单元中的8 位二进制数转换成10 进制数。
希望转换后的结果保存于31H和32H,31H 低 4 位存放个位,高 4 位存放十位,32H 低 4 位存放百位,高 4 位为0自我完成实验程序ORG 0000H!AJMP MAINORG 0030HMAIN:MOV SP,#62H ;MOV 30H,#0AFH ;先将30H写上100MOV R0,#32H ;将百位地址送R0MOV A,30H ;这句写错了,应该是将30H的内容送给A,而不是30H,我误写成了#30HMOV B,#64H ;除数为100DIV AB ;AB相除…MOV @R0,A ;将百位的数送给32H地址MOV A,B ;将余数送给AMOV B,#0AH ;将10送BDIV AB ;AB相除SWAP A ;高低四位交换DEC R0 ;R0减1 到31HMOV @R0,A ;将十位送31H的高四位MOV A,BANL A,#0FHORL 31H,A ;31高低四位分别存十和百位~SJMP $END总结与提高:本程序用了一个小算法,一个三位数数X除以100,商a为百位,余数为:X-100*a 再用此余数除10,商为十位,余数为个位。
实验2:汇编程序实验2自我完成实验(1)实验内容:将片内RAM 30H 开始的32 个单元中分布着随机的有符号8 位二进制数,请按从小到大的顺序进行排序,排序后的数据仍然保存到30H 开始的32 个单元中(低地址存放小数据)。
程序及其注释②自我完成实验程序第一种排序方法:ORG 0000HAJMP MAINORG 0090H:MAIN:MOV SP,#62H ;MOV A,#0HMOV R1,#30HMOV R7,#20HMOV DPTR,#TABLEMOV R0,#1FH ;执行31次LOOP1:MOVC A,@A+DPTR}MOV @R1,AINC R1INC DPTRMOV A,#0HDJNZ R7,LOOP1 ;执行32次循环,在30-4F写表格数据LOOP2: MOV R1,#30H ;将起始地址给R1MOV A,R0 ;R0为执行31次MOV R2,A ;把进行一次冒泡的次数存到R2中|LOOP3:CLR C ;清CMOV A,@R1 ;;比较开始,取第一个数MOV R3,A ; 腾出累加器INC R1 ;指向下一个地址SUBB A,@R1 ;取后一个数,并与前一个数相减,看是否有CY位溢出,溢出则说明前一个数小,要换位JC LOOP4 ;前一个数小的情况下,两个数交换位置,否则,继续执行MOV A,R3 ;把后一个数存到累加器下XCH A,@R1 ;累加器的数与R1指向的数交换位置,即;前一个数和后一个数交【DEC R1 ;R1自减,准备将后面的数存到前面MOV @R1,A ;将后面的数存到前面INC R1 ;R1自增,准备下次转换,以上五行为交换LOOP4: DJNZ R2,LOOP3 ;R2自减,为下次冒泡准备DJNZ R0,LOOP2 ;跳回去进行下一轮冒泡SJMP $·ORG 30HTABLE: DB 1,3,9,2,17,4,11,6DB 5,20,100,64,21,14,79,35DB 92,7,91,23,65,16,13,18DB 18,73,65,101,27,19,62,69END第二种排序方法;!ORG 0000HAJMP MAINORG 0090HMAIN:MOV SP,#62H ;MOV A,#0HMOV R1,#30HMOV R7,#20HMOV DPTR,#TABLEMOV R0,#1FH ;执行31次(LOOP1:MOVC A,@A+DPTRMOV @R1,AINC R1INC DPTRMOV A,#0HDJNZ R7,LOOP1 ;执行32次循环,在30-4F写表格数据…LOOP2: MOV R1,#30H ;将起始地址给R1MOV A,R0 ;R0为执行31次MOV R2,A ;把进行一次冒泡的次数存到R2中MOV R4,#30H ;R4存的是最大数的位置LOOP3:CLR C ;清CMOV A,@R1 ;;比较开始,取第一个数MOV R3,A ; 腾出累加器INC R1 ;指向下一个地址、MOV A,@R4SUBB A,@R1 ;取后一个数,并与前一个数相减,看是否有CY位溢出,溢出则说明前一个数小,要换位JC LOOP4 ;前一个数小的情况下,两个数交换位置,否则,继续执行;MOV A,R3 ;把后一个数存到累加器下;XCH A,@R1 ;累加器的数与R1指向的数交换位置,即;前一个数和后一个数交;DEC R1 ;R1自减,准备将后面的数存到前面;MOV @R1,A ;将后面的数存到前面;INC R1 ;R1自增,准备下次转换,以上五行为交换>DJNZ R2,LOOP3 ;R2自减,为下次冒泡准备LOOP4:MOV A,R1 ;MOV R4,ADJNZ R2,LOOP3DJNZ R0,LOOP2 ;跳回去进行下一轮冒泡SJMP $#ORG 30HTABLE: DB 1,3,9,2,17,4,11,6DB 5,20,100,64,21,14,79,35DB 92,7,91,23,65,16,13,18DB 18,73,65,101,27,19,62,69END.总结与提高:所谓冒泡法,有两种理解方式:1.相邻的两个数比较,大的数放后一个位置,直到一轮循环后,最后一个数为此轮遍历的最大的数。
MCS51单片机原理及应用实验指导书

《MCS51单片机原理及应用》实验指导书唐山学院电工电子实验教学中心年月前言一.单片机原理实验的任务单片机原理实验是单片机原理及应用课程的一部分,它的任务是:1.通过实验进一步了解和掌握单片机原理的基本概念、单片机应用系统的硬件设计及调试方法。
2.学习和掌握单片机应用系统程序设计技术。
3.提高应用计算机的能力及水平,提高逻辑思维及动手能力。
二.实验设备单片机实验所使用的设备由计算机、单片机实验开发系统(见下图0-1),其中计算机是软件开发平台,主要完成程序编辑、编译、下载程序等任务;单片机实验开发系统是硬件开发平台,是基于51/196单片机的扩展实验系统。
计算机和单片机实验开发系统之间是通过RS232串行接口进行通信的。
图0-1 单片机原理实验设备单片机实验开发系统配有开关电源、单片机、晶振、存储器、可编程并行接口芯片、键盘显示控制芯片、24键键盘、六位LED数码管显示、A/D及D/A转换芯片、简单输出口2个、简单输入口1个、逻辑电平输入开关、发光二极管显示电路,并配有小直流电机、步进电机、继电器、音响等驱动电路。
在计算机软件的控制下可完成单片机基本实验及综合设计性实验项目。
所有的MCS51单片机原理及应用课程实验都是在这套实验系统上完成的。
三.对参加实验学生的要求1.阅读实验指导书,复习与实验有关的理论知识,明确实验目的,了解内容和方法。
2.按实验指导书要求进行接线和操作,经检查和指导老师同意后再通电。
3.在实验中注意观察思考,记录有关数据和程序,并由指导教师复查后才能结束实验。
4.实验后应断电并返回WINDOWS下关闭计算机,整理实验台,恢复到实验前的情况。
5.认真写实验报告,按规定格式写出程序流程图、程序、并分析实验结果、完成思考题等。
字迹要清楚,结论要明确。
爱护实验设备,遵守实验室纪律。
*注:本实验指导书适用于MCS51单片机原理及应用A、单片机原理及应用B等课程。
目录第一章MC51单片机原理及应用实验 (3)实验一P1口实验(验证性) (3)实验二外部中断实验(验证性) (5)实验三定时器实验 (7)实验四串行口实验--串并转换实验 (9)实验五数码显示实验 (11)实验六A/D转换实验 (13)实验七数字电子钟实验(综合性) (15)实验八D/A转换实验 (16)实验九简单I/O口扩展实验 (18)实验十步进电机实验 (20)实验十一直流电机实验 (22)实验十二PC机与单片机串行通信实验 (24)实验十三继电器与电子音响实验 (26)实验十四8255可编程并行接口实验 (28)实验十五键盘显示接口实验 (30)第二章单片机开发实验系统及TMSD调试程序 (32)第一节单片机开发实验系统 (32)第二节TMSD源语言调试程序简介 (35)第一章MCS51单片机原理及应用实验实验一P1口实验一.实验目的1.学习P1口的使用方法。
山东大学单片机实验报告 2018

此文档免费建议下载后再复制代码,百度文库直接复制格式会出错。
学弟学妹们,这是山东大学单片机keil和proteus实验的实验报告(2018年),包含代码,程序框图和proteus原理图硬件实验中报告中代码全部能用,想省事直接复制黏贴即可。
1.如果c语言报错,看下是不是{ } ;// 这三种符号漏掉了{} 在for语句中有些可能复制的时候把这个符号漏掉了如果报错可以试试加上一个这个;在语句结尾处报错时使用// 某些注释或者分割的*********** 可能//复制时会掉需要在前面加上//才能不报错2.proteus在win10系统中必须用proteus8 ,proteus7全不能用。
使用proteus8时必须右键管理员身份运行,否则会提示运行库缺失。
3.此外我这里有已经做好的文件打包分享在网盘里,需要自取。
链接: https:///s/1vTIwya0-kFXyWV9quf8Hfw 密码: 2au6其中Uv2是keil的程序,已生成hex文件可直接使用。
Pdsprj是原理图,在proteus中打开即可(先用2的方法打开proteus,然后再用proteus打开)Ps:传承,分享是中华美德,如果觉得很实用用请传给下一届。
2.2汇编程序实验2(1)实验内容将片内RAM 30H开始的32个单元中分布着随机的有符号8位二进制数,请按从小到大的顺序进行排序,排序后的数据仍然保存到30H开始的32个单元中(低地址存放小数据)。
编程思路:首先,在程序存储器中构建一个表格,该表格具有32个随机产生的8位二进制数,如:TABLE: DB 1,3,9,2,17,4,11,6DB 5,20,100,64,21,14,79,35DB 92,7,91,23,65,16,13,18DB 18,73,65,101,27,19,62,69然后利用查表指令“MOVC A,@A+DPTR”将它们读取到30H-4FH单元中,然后再利用“冒泡法排序法”将它们排序即可。
单片机实验总结(山科考试参考)

1、将(R2)和(R4)中的十六进制数相乘,结果存放在3AH(低字节)和3BH (高字节)单元中。
MOV A,R2MOV B,R4MUL ABMOV 3AH,AMOV 3BH,B2、编写程序,把累加器A 中的二进制数变换成3位BCD码,并将百、十、个位数分别存放在内部RAM的30H、31H、32H中。
MOV B, #100DIV ABMOV 30H, AMOV A, #10XCH A, BDIV ABMOV 51H,AMOV 52H,B3、试编写程序,将R3中的低4位数与R4中的高4位数合并成一个8位数,并将其存放回R5中。
一法:MOV A,R3ANL A,#OFHMOV R5,AMOV A,R4ANL A,#FOHORL A,R5MOV R5,A二法:MOV A,R3MOV @R0,AMOV A,R4XCHD A,@R0MOV R5,A4、试编写程序,将外部RAM 中1234H开始的16个单元的十六进制数存入内部RAM 30H到3FH单元中。
MOV DPTR,#1234HMOV R0,#30HLOOP:MOVX A,@DPTR MOV @RO,AINC DPTRINC ROCJNE R0,#40H,LOOP ;如果R0和立即数40H不相等则继续进行循环,相等跳出5、已知被加数存在(R2)(R3)中,加数存在(R4)(R5)中,高位在前;试编两字节加法程序,将相加之和存放在30H(低位)、31H(高位)和32H(进位)中单元中。
MOV A,R3ADD A,R5MOV 30H,AMOV A,R2ADDC A,R4MOV 31H,ACLR AADDC A,#00HMOV 32H,A实验一:编写一套完整的汇编语言程序:将(R2R3)和(R4R5)中的双字节无符号数相加,结果存放在40H、41H和42H单元中。
并生成main.lst文件和top.hex,假设:(R2)=12H,(R3)=34H,(R4) =56H,(R5)=78HOrg 0000hLjmp mainOrg 100h Main: mov r2,#12hMov r3,#34hMov r4,#56hMov r5,#78hmov a,r3Add a,r5Mov 42h,aMov a,r2Addc a,r4Mov 41h,aMov a,#00hAddc a,#00hMov 40h,aend1.应用MOVC A,@A+DPTR指令求累加器A 的平方值Y(设Y<=15),并把结果送至R7中保存。
山东大学飞思卡尔单片机教学C语言程序设计PPT课件

行编写时,就不用担心自己所定义的函数与别人定义的重 名了。 如果在函数名和函数类型前加extern,则表示此函数是外部函 数,可以被其他文件中的函数调用。如: extern int func(int x,int y)。
12
第六章 C语言程序设计
File1.c #include <File2.h>
/* 包含文件FILE2.c中的函数 */
void main (void)
{ MyFunction(); MyFunction();
/* 第一次进入MyFunction之前,myVar=0 */ /* 第二次进入MyFunction之前,myVar=1 */
实验5:使用仿真方法,编写并调试复杂的C语言程序 1.自定义一个包含10个无符号int型的数组,数组元素分别是10, 9,8,7,6,5,4,3,2,1,0。使用冒泡排序法对该数组元 素进行从小到大排序,调试并观察存储器区数据变化,程序要 有注释。
2
第六章 C语言程序设计
本周实验安排
2.基于上个程序,把排序好的数组进行数字滤波:去除最大的3 个和最小的3个,剩下的求平均,调试并观察存储器区数据变化, 程序要有注释。 3.课本195页例2、例3,课本196页例4 调试并观察存储器区数据变化。
6
第六章 C语言程序设计
其它C语言基础知识参见补充课件: “补充(自己看)_C语言基础.PPT”
7
第六章 C语言程序设计
§6-2 MC9S12的C编程与ANSI C的不同
CodeWarrior数据类型
ARM Cortex-M4学习与实践——纪成

J-Link
P&E Multilink
OSBDM
山东大学 Kinetis培训
Kinetis调试工具
山东大学智能车工作室根据开源资料,自行设计了OSBDM调试器和 USBDM调试器,其中OSBDM由飞思卡尔官方开源,目前由P&E公司维护, USBDM由网友pgo开源和维护。 经过二次设计和完善,目前山大设计的OSBDM分别支持CW、IAR和 Keil MDK三种开发环境,而且支持飞思卡尔几乎全系列MCU,包括: Freescale HCS12/HCS12(X)/HCS08(已测试MC9S12DG128、MC9S08JM60) Freescale Coldfire V1,V2,V3,V4(已测试MCF52259) Freescale DSC全系列(已测试MC56F8366) Freescale PowerPC架构的Qorivva系列(已测试MPC5604B) Freescale Cortex-M4核的Kinetis系列(已测试K10、K60)
山东大学 Kinetis培训
一、飞思卡尔Kinetis功能特性
1、ARM发展史 2、ARMv7处理器分类 3、ARM Cortex-M4特性 4、飞思卡尔Kinetis家族介绍 5、K60内部资源介绍
山东大学 Kinetis培训
ARM发展史
ARM架构发展历程
山东大学 Kinetis培训
ARMv7处理器分类
ARMv7根据应用分类:
• 应用处理器(Cortex-A系列) Aplication Processor • 实时控制器(Cortex-R系列) Real-time Processor • 微控制器(Cortex-M系列) Micro Controller 山东大学 Kinetis培训
单片机实验报告(中北大学)

程序:#include<reg51.h>
#include<absacc.h>
#define DAC0832 XBYTE[0xfeff]
void main()
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77};//键盘表
uchar code TABLE[]={0x3F,0x06,0x5B,0x4F,
0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7c,
0x39,0x5e,0x79,0x71};//共阴极数码管编码表
}
}
电路图:
{e(1)
{
for(num=0;num<=255;num++)
DAC0832=num;
}
}
电路图:
串口通信
发送程序:
#include<reg52.h> //fa song
#define uchar unsigned char
void delay(uchar num)
TI=0;
while(RI==0);
RI=0;
if(SBUF==c){
P2=c;
if(++c>15) c=0;
delay(2550);
}
}
}
接受程序:
#include<reg52.h> //jieshou
#define uchar unsigned char
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ﻩOE=0;
ﻩﻩif(((lastdate<128)&&(date>=128))||((lastdate>=128)&&(date<128)))
{
ﻩﻩf++;
ﻩOut_pulse=1;
_nop_();
ﻩﻩ_nop_();
ﻩ_nop_();
ﻩ_nop_();
ﻩOut_pulse=0;
}
void lcd_wdat(uchardat)
{
ﻩwhile(lcd_busy());
LCD_RS=1;
LCD_RW=0;
ﻩLCD_EN=0;
ﻩ_nop_();
_nop_();
P1=dat;
_nop_();
_nop_();
_nop_();
_nop_();
ﻩLCD_EN=1;
ﻩ_nop_();
_nop_();
uchar date,lastdate,ge,shi;
void delay_ms(uintxms)
{
ﻩuinti,j;
ﻩfor(i=xms;i>0;i--)
ﻩ{
ﻩﻩfor(j=110;j>0;j--);
}
}
bit lcd_busy()
{
bit result;
LCD_RS=0;
ﻩLCD_RW=1;
LCD_EN=1;
_nop_();
_nop_();
LCD_EN=0;
}
voidlcd_init()//初始化子程序
{
delay_ms(15);
lcd_wcmd(0x38);//8位数据总线,显示2行,5*7点阵
delay_ms(5);
ﻩlcd_wcmd(0x0c);//显示开,关光标,不闪烁
delay_ms(5);
lcd_wcmd(0x06);//进入模式设置指令中,地址自动增加
ﻩ_nop_();
_nop_();
ﻩ_nop_();
ﻩ_nop_();
ﻩresult=(bit)(P1&0x80);
ﻩLCD_EN=0;
return result;
}
voidlcd_wcmd(ucharcmd)
{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
ﻩLCD_EN=0;
信息科学与工程学院
2016-2017学年第二学期
实 验 报告
课程名称:单片机原理与应用
实验名称:3、8 ADC0808/9信号采集实验
实验报告
【实验题目】
本实验利用LCD1602与AD0808实现简单得交流信号过零检测与频率分析。要求信号幅度变化时(满量程得5%~95%),不影响检测得结果。频率检测得结果通过LCD1602得第1行显示出来,信号过零时,能够通过P2、6输出一个脉冲宽度为5微秒得脉冲信号。
ﻩdelay_ms(5);
ﻩlcd_wcmd(0x01);//清楚LCD显示内容
delay_ms(5);
}
voids_timer0()interrupt1
{
ﻩTH0=0x3c;
ﻩTL0=0xb0;
tx50=tx50+1;
if(tx50==20)
{
ﻩﻩTR0=0;
ﻩﻩtx50=0;
ﻩﻩf=f/2;
ﻩﻩshi=f/10;
lcd_wdat('H');
ﻩdelay_ms(5);
ﻩlcd_wdat('z');
f=0;
ﻩTR0=1;
}
}
void s_timer1()interrupt3
{
ﻩAD_CLK=~AD_CLK;
}
voidmain()
{
ﻩdelay_ms(10);
ﻩlcd_init();
ﻩlcd_clr();
delay_ms(2);
sbit LCD_RS=P2^0;
sbitLCD_RW=P2^1;
sbitLCD_EN=P2^2;
sbit AD_CLK=P2^3;
sbit Start=P2^4;
sbit OE=P2^5;
sbit Out_pulse=P2^6;
sbit EOC=P2^7;
uchar tx50=0;
uchar f=0;
}
}
}
_nop_();
_nop_();
P1=cmd;
_nop_();
ﻩ_nop_();
ﻩ_nop_();
_nop_();
LCD_EN=1;
ﻩ_nop_();
ﻩ_nop_();
ﻩ_nop_();
_nop_();
ﻩLCD_EN=0;
}
voidlcd_clr()
{
lcd_wcmd(0x01);
ﻩdelay_ms(2);
ﻩﻩshi=shi+'0';
ﻩge=f%10;
ﻩge=ge+'0';
ﻩlcd_wcmd(0x80);
ﻩlcd_wdat('F');
ﻩdelay_ms(5);
ﻩ lcd_wdat('=');
ﻩﻩdelay_ms(5);
ﻩlcd_wdat(shi);
ﻩdelay_ms(5);
lcd_wdat(ge);
ﻩdelay_ms(5);
【实验要求】
1.编写源程序并进行必要得注释;
2.记录实验过程;
3.记录程序运行结果;
【实验过程及结果记录】
自我完成实验
A、电路图
B、运行结果
频率监测
过零检测、h>
#include <intrins、h>
#defineuintunsignedint
#defineuchar unsignedchar
ﻩTMOD=0x21;
TH1=0xfd;
ﻩTL1=0xfd;
TH0=0x3c;
ﻩTL0=0xb0;
EA=1;
ﻩET0=1;
ﻩET1=1;
TR0=1;
TR1=1;
ﻩwhile(1)
ﻩ{
ﻩStart=1;
Start=0;
while(EOC!=1);
ﻩOE=1;
P0=0xff;
ﻩlastdate=date;