单片微机原理与接口技术实验指导ok文档格式.docx
《单片微机原理与接口技术实验指导ok文档格式.docx》由会员分享,可在线阅读,更多相关《单片微机原理与接口技术实验指导ok文档格式.docx(39页珍藏版)》请在冰豆网上搜索。
![单片微机原理与接口技术实验指导ok文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/21/f8ad2ede-d408-4f80-af22-0aac69315cdb/f8ad2ede-d408-4f80-af22-0aac69315cdb1.gif)
voidmain(void)
GPIO();
while
(1)
P1=x;
Delay1000ms();
x=_crol_(x,1);
}
(2)用KeilmVision2开发工具输入、编辑与编译上述实验程序,并生成该程序的机器代码。
(3)用KeilmVision2开发工具的软件模拟仿真功能调试本实验程序。
5.程序调试及效果分析
(1)从项目文件夹中,查看生成的机器代码,默认情况下,其默认文件名取决于哪里。
(2)用KeilmVision2开发工具的软件模拟仿真功能调试本实验程序的效果。
6.实验报告要求
(1)总结给KeilmVision2开发工具添加STC系列单片机型号、头文件以及STC在线仿真驱动数据库的方法。
(2)总结应用KeilmVision2开发工具编辑、编译用户程序,生成用户程序机器代码的操作步骤。
实验二用户程序的在线编程与在线仿真
(1)理解STC单片机与PC机USB接口的通信线路及学会加载USB转串口的驱动程序。
(2)学会用STC-ISP在线编程工具给单片机加载用户程序与在系统调试。
(3)学会应用KeilmVision4开发工具与STC15实验板进行用户程序的在线仿真调试。
(1)预习3.2节内容,理解STC单片机与PC机USB接口的通信线路,以及加载USB转串口驱动程序的方法。
(2)预习3.2节内容,掌握用STC_ISP在线编程工具下载用户程序的方法。
(3)预习3.2节内容,掌握STC单片机在线仿真的方法,包括如何设置仿真芯片以及KeilmVision4开发工具在线硬件仿真的设置。
(4)分析demo.c的程序功能。
3.实验参考程序(demo.c)
/*---------1ms延时函数,从STC-ISP工具中获得---------*/
voidDelay1ms()//@11.0592MHz
unsignedchari,j;
i=11;
j=190;
while(--j);
/*------------xms延时函数---------------*/
voiddelay(uintx)//@11.0592MHz
uinti;
for(i=0;
i<
x;
i++)
Delay1ms();
}
P17=0;
delay(1000);
P17=1;
P16=0;
P16=1;
P47=0;
P47=1;
P46=0;
P46=1;
4.实验电路原理及硬件连线
本实验基于STC15开发板上实施,硬件线路包括STC单片机与PC机USB接口的通信线路,以及LED7、LED8、LED9、LED10等LED灯。
5.实验内容
(1)用KeilmVision2开发工具编辑、编译demo.c程序,并生成机器代码。
(2)用STC_ISP在线编程工具给STC15单片机开发板下载用户程序,运行用户程序,验证程序功能是否符合程序要求。
(3)应用KeilmVision2开发工具与STC15实验板进行用户程序的在线仿真调试,验证程序功能是否符合程序要求。
6.程序调试及效果分析
(1)在系统调试,分析程序运行效果。
(2)在线仿真调试,分析程序运行效果。
7.实验报告要求
(1)总结STC单片机在线编程的操作步骤与在系统调试方法。
(2)总结STC单片机在线仿真方法。
(3)总结STC单片机在线仿真有什么优势?
实验三IAP15W4K58S4单片机外部中断的应用编程与调试
(1)进一步掌握中断技术的原理。
(2)掌握外部中断触发方式的设置与应用编程。
预习7.1~7.3节内容,分析INT01.ASM与int01.c,根据程序功能制定程序调试方案。
3.实验参考程序
(1)INT01.ASM
$include(stc15.inc);
STC15新增特殊功能寄存器的定义文件,详见附录六
ORG0000H
LJMPMAIN
ORG0003H
LJMPINT0_ISR
ORG0013H
LJMPINT1_ISR
MAIN:
LCALLGPIO;
调用初始化程序
SETBIT0
SETBIT1
SETBEX0
SETBEX1
SETBEA
SJMP$
INT0_ISR:
CPLP1.7
RETI
INT1_ISR:
CPLP4.7
$include(gpio.inc);
STC15I/O口的初始化文件
END
(2)int01.c
#include<
//包含支持IAP15W4K58S4单片机的头文件
//I/O初始化文件
voidex01_init()
IT0=1;
IT1=1;
EX0=1;
EX1=1;
EA=1;
voidmain()
ex01_init();
while
(1);
voidint0_isr()interrupt0
P17=~P17;
voidint1_isr()interrupt2
P47=~P47;
基于STC15单片机开发板实施,采用LED7、LED9显示,采用SW17、SW18输入外部中断0和外部中断1中断请求信号。
(1)完成INT01.ASM程序的编辑、编译与调试。
(2)完成int01.c程序的编辑、编译与调试。
(1)调试INT01.ASM程序,记录与分析程序运行效果。
(2)调试int01.c程序,记录与分析程序运行效果。
(1)总结外部中断的触发方式设置与工作特点。
(2)总结按键输入外部中断请求信号存在的问题与解决方法。
实验四IAP15W4K58S4单片机定时器/计数器定时功能的应用编程与调试
(1)进一步掌握IAP15W4K58S4单片机定时器/计数器的电路结构与工作原理。
(2)掌握IAP15W4K58S4单片机定时器/计数器定时功能的应用编程。
(1)预习8.1~8.3节内容,掌握IAP15W4K58S4单片机定时器/计数器TMOD、TCON的设置与应用编程。
(2)预习8.4节内容,分析参考程序FLASH.ASM与flash.c。
3.实验参考程序
(1)FLASH.ASM
STC15新增特殊功能寄存器的定义文件
ORG0000H
LJMPMAIN
ORG001BH
LJMPT1_ISR
LCALLGPIO;
MOVR3,#20;
置50ms计数循环初值
MOVTMOD,#00H;
设定时器1为方式0定时
MOVTH1,#3CH;
置50ms定时器初值
MOVTL1,#0B0H
SETBET1;
开放T1中断
SETBEA
SETBTR1;
启动T1
SJMP$;
原地踏步
T1_ISR:
DJNZR3,T1_QUIT;
未到1s继续循环
MOVR3,#20
CPLP1.6
CPLP1.7
CPLP4.6
CPLP4.7
T1_QUIT:
RETI
END
(2)Flash.c
//I/O初始化文件
uchari=0;
//初始化函数
TMOD=0x00;
TH1=0x3c;
TL1=0xb0;
ET1=1;
TR1=1;
voidT1_isr()interrupt3
i++;
if(i==20)
i=0;
P16=~P16;
//LED灯的驱动取反输出
P17=~P17;
P46=~P46;
P47=~P47;
基于STC15开发板,采用数码管显示秒表值。
完成SECOND.ASM与second.c程序的编辑、编译与调试。
(1)调试SECOND.ASM程序,观察与记录程序运行结果。
(2)调试second.c程序,观察与记录程序运行结果。
(1)以IAP15W4K58S4单片机定时器/计数器方式0的电路结构,分析IAP15W4K58S4单片机定时器/计数器的工作原理。
(2)分析FLASH.ASM.ASM与flash.c的程序功能。
实验五IAP15W4K58S4单片机双机通信的应用编程与调试
(1)巩固串行通信的基本概念与基本知识。
(2)掌握IAP15W4K58S4单片机串行口1工作方式的设置与应用编程。
(1)预习9.1节内容,掌握串行通信的基本知识。
(2)预习9.2节内容,掌握IAP15W4K58S4单片机串行口1的工作方式与应用编程。
(3)分析例参考程序UART.ASM与uart.c,根据程序功能制定程序的调试方案。
(1)UART.ASM
ORG0023H
LJMPS_ISR
LCALLGPIO
LCALLUARTINIT
SETBES
ORLP3,#00001100B
LOOP:
MOVA,P3
ANLA,#00001100B
MOVSBUF,A
JNBTI,$
CLRTI
LCALLDELAY100MS;
设置发送间隔
SJMPLOOP
S_ISR:
PUSHACC
JNBRI,S_QUIT
CLRRI
MOVA,SBUF
ANLA,#00001100B
CJNEA,#00H,NEXT1
CLRP1.7
SETBP1.6
SETBP4.7
SETBP4.6
SJMPS_QUIT
NEXT1:
CJNEA,#04H,NEXT2
SETBP1.7
CLRP1.6
NEXT2:
CJNEA,#08H,NEXT3
CLRP4.7
NEXT3:
CLRP4.6
S_QUIT:
POPACC
UARTINIT:
;
9600bps@11.0592MHz,从STC-ISP工具中获得
MOVSCON,#50H;
8位数据,可变波特率
ORLAUXR,#40H;
定时器1时钟为Fosc,即1T
ANLAUXR,#0FEH;
串口1选择定时器1为波特率发生器
ANLTMOD,#0FH;
设定定时器1为16位自动重装方式
MOVTL1,#0E0H;
设定定时初值
MOVTH1,#0FEH;
CLRET1;
禁止定时器1中断
SETBTR1;
启动定时器1
RET
DELAY100MS:
@11.0592MHz,从STC-ISP工具中获得
NOP
PUSH30H
PUSH31H
PUSH32H
MOV30H,#4
MOV31H,#93
MOV32H,#152
NEXT:
DJNZ32H,NEXT
DJNZ31H,NEXT
DJNZ30H,NEXT
POP32H
POP31H
POP30H
(2)uart.c
uchartemp;
uchartemp1;
voidDelay100ms()//@11.0592MHz
i=5;
j=52;
k=195;
voidUartInit(void)//9600bps@11.0592MHz
SCON=0x50;
//8位数据,可变波特率
AUXR|=0x40;
//定时器1时钟为Fosc,即1T
AUXR&
=0xFE;
//串口1选择定时器1为波特率发生器
TMOD&
=0x0F;
//设定定时器1为16位自动重装方式
TL1=0xE0;
//设定定时初值
TH1=0xFE;
ET1=0;
//禁止定时器1中断
TR1=1;
//启动定时器1
UartInit();
ES=1;
temp=P3;
temp=temp&
0x0c;
SBUF=temp;
while(TI==0);
TI=0;
Delay100ms();
voiduart_isr()interrupt4
if(RI==1)
RI=0;
temp1=SBUF;
switch(temp1&
0x0c)
case0x00:
P17=0;
P16=1;
P47=1;
P46=1;
break;
case0x04:
P17=1;
P16=0;
case0x08:
P47=0;
default:
P46=0;
}
基于STC15单片机开发板实施,采用LED7~LED10采用,采用SW17、SW18输入控制信号。
甲机的P3.0与乙机的P3.1相连,甲机的P3.1与乙机的P3.0相连,甲机的地线与乙机的地线相连。
(1)完成UART.ASM程序的编辑、编译与调试。
(2)完成uart.c程序的编辑、编译与调试。
(3)改用串行口2实现双机通信,试编写程序并调试。
(1)调试UART.ASM程序,改变甲机SW17、SW18的输入状态,观察乙机LED7~LED10的状态,并记录与分析;
反之,改变乙机SW17、SW18的输入状态,观察甲机LED7~LED10的状态,并记录与分析。
(2)调试uart.c程序,改变甲机SW17、SW18的输入状态,观察乙机LED7~LED10的状态,并记录与分析;
(3)调试用串行口2实现双机通信的程序。
(1)总结串行口1的工作方式与工作特性。
(2)双机通信的调试结果与分析。
(3)用串行口2实现双机通信,画出用串行口实现双机通信的电路图,列出实验程序与调试记录,分析调试结果。
实验六IAP15W4K58S4单片机AD转换模块的应用编程与调试
1.实验目的
(1)掌握IAP15W4K58S4单片机AD转换模块的编程应用。
(2)通过实验理解IAP15W4K58S4单片机AD转换模块如何进行数据采集,如何实现模拟量到数字量的转换。
(3)了解IAP15W4K58S4单片机AD转换模块在各种领域的应用。
2.预习与思考
(1)复习IAP15W4K58S4单片机AD转换模块的结构以及寄存器的控制使用。
(2)复习IAP15W4K58S4单片机8位或10位AD转换结果在两种不同存储格式下分别的计算方法。
(3)复习IAP15W4K58S4单片机AD转换模块的应用编程要点与思路,分析ad.c程序的功能。
3.实验参考程序(ad.c)
595hc.h>
uintadc_value;
//定义无符号字符型变量adc_value用于保存ADC值
voidmain(void)//主程序
//定义整型变量i用于适当延时
ADC_CONTR|=0x80;
//打开A/D转换电源
1000;
i++);
//适当延时
P1ASF=0x02;
//设置ADC1(P1.1)为模拟量输入功能
CLK_DIV|=0x20;
//ADRJ=1,设置A/D转换结果的存储格式
ADC_CONTR=0x89;
//选择选择输入通道ADC1(P1.1)并启动A/D转换
EADC=1;
//打开ADC中断
//打开CPU总中断
Dis_buf[7]=adc_value%10;
//秒值送显示缓冲区
Dis_buf[6]=adc_value/10%10;
Dis_buf[7]=adc_value/100%10;
Dis_buf[6]=adc_value/1000%10;
display();
//调显示函数
voidADC_int(void)interrupt5//ADC中断服务子程序
ADC_CONTR=0x81;
//将ADC_FLAG清0
adc_value=ADC_RES*256+ADC_RESL;
//保存10位A/D转换结果,范围为0~1023
//重新启动A/D转换
4.实验电路原理及硬件连线
将STC15实验板W1电位器的中间抽头(P5.5)接AD转换的输入端P1.1,转换后结果送数码管显示(0~1023)。
(1)完成ad.c程序的编辑、编译与调试。
(2)如果AD模块采用查询方式进行转换,编写程序并验证效果。
(3)如果AD模块采用定时方式进行转换,编写程序并验证效果。
6.程序调试及效果分析
(1)通