单片机实验报告汇总.docx

上传人:doc321 文档编号:12898233 上传时间:2021-12-07 格式:DOCX 页数:11 大小:237.94KB
返回 下载 相关 举报
单片机实验报告汇总.docx_第1页
第1页 / 共11页
单片机实验报告汇总.docx_第2页
第2页 / 共11页
单片机实验报告汇总.docx_第3页
第3页 / 共11页
单片机实验报告汇总.docx_第4页
第4页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《单片机实验报告汇总.docx》由会员分享,可在线阅读,更多相关《单片机实验报告汇总.docx(11页珍藏版)》请在三一文库上搜索。

1、计时器1#include <reg52.h>#include <stdio.h>#include <intrins.h>sbit pausebutton =P32。sbit countbutton =P33。bit int0_Mark 。unsigned char HEXtoBCD (unsigned char hex>return (hex/10>*16+(hex%10>>。void main ( void>unsigned char uc10ms=0, uc1s=0,uc60s=0。TMOD=0x01 。IE=0x82。wh

2、ile(1>countbutton =1。uc10ms=0, uc1s=0。P1=HEXtoBCD(uc10ms>。P2=HEXtoBCD(uc1s>。while(countbutton>。 while(!countbutton>。while(pausebutton>int0_Mark=1。TH0=0xDC。 TL0=0x00。TR0=1。EA=1。while(int0_Mark> 。EA=0。TR0=0。uc10ms+。if(uc10ms=100>uc10ms=0。 uc1s+。P1=HEXtoBCD(uc10ms>。if(uc1s=60

3、>uc1s=0。uc60s+。P2=HEXtoBCD(uc1s>。1/11if(!pausebutton>while(!pausebutton>。while(pausebutton>if(countbutton>break。void timer0( void> interrupt1EA=0。int0_Mark=0 。TR0=0。TH0=0x28。TL0=0x00 。TR0=1。EA=1。2#include<reg52.h>#define uchar unsigned charbit into_mark。uchar HEXtoBCD (uch

4、ar hex>2/11return(hex/10>*16+(hex%10>>。void main (void>uchar uc10ms=0,uc1s=0。IE=0x87。/EA=1。打开总中断EX0=1。 EX1=1。打开外部中断0、 1ET0=1。打开定时器 0 中断 RqS7gWq8Tvb5E2RGbCAPTCON=0x05。/ IT0=1 。 IT1=1。 /脉冲触发TMOD=0x01 。 /设置定时器 0 为工作方式 1uc10ms=0,uc1s=0。P1=HEXtoBCD(uc10ms>。P2=HEXtoBCD(uc1s>。while(1&g

5、t;into_mark=1。while(into_mark> 。 / 等待 10ms 定时到uc10ms+。if(uc10ms=100>uc10ms=0。uc1s+。P1=HEXtoBCD(uc10ms>。if(uc1s=60>uc1s=0。P2=HEXtoBCD(uc1s>。void extInterrupt0(void> interrupt 0/停止EA=0。TR0=0。EA=1。void extInterrupt1(void> interrupt 2/启动EX1=0。TR0=1。/打开定时器 0,也可以是 ET0=1。EA=1。void time

6、r0(void> interrupt 13/11EA=0。into_mark=0。TR0=0。TH0=0xDC 。TL0=0x00。TR0=1。EX1=1。 /要在此打开外部中断 1,不然的话外部中断会不再起作用的EA=1。串口通信1#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intbit flag=1。bit into_mark。sbit SEND_RECI_CTRL=P37 。void initUart(> 。void time(

7、uint ucMs> 。void send(>。void receive(>。4/11uchar count1(>。uchar count2(>。void main (>IE=0x87。TCON=0x05。TMOD=0x01 。P1=0x00。P2=0x00。initUart(> 。time(10>。if(SEND_RECI_CTRL>send(>。elsereceive(>。void send( >while(1>P2=count1(>。 SBUF=count1(>。 while(TI=0> 。T

8、I=0 。P1=count2(>。 SBUF=count2(>。 while(TI=0> 。TI=0 。uchar count1(>static uchar uc10ms=0。while(1>into_mark=1。TH0=0xDC 。 TL0=0x00。EA=1。while(into_mark> 。uc10ms+。if(uc10ms=100>uc10ms=0。flag=0。return (uc10ms/10>*16+(uc10ms%10>。uchar count2(>static uchar uc1s=0。while(1>if

9、(flag=0>uc1s+ 。flag=1。if(uc1s=60>5/11uc1s=0。return(uc1s/10>*16+(uc1s%10>>。void receive(>while(1>while(RI=0>RI=0 。P2=SBUF。while(RI=0>RI=0 。P1=SBUF。void extInterrupt0(void> interrupt 0EA=0。TR0=0。EA=1。void extInterrupt1(void> interrupt 2EA=0。TR0=1。EA=1。void timer0(void&

10、gt; interrupt 1EA=0。into_mark=0。TR0=0。TH0=0xDC 。TL0=0x00。TR0=1。EA=1。void initUart(void>SCON=0x50。TMOD=0x20 。PCON=0x0。TH1=0xfd 。TCON=0x40。void delay_5us(void>_nop_(>。6/11_nop_(>。void delay_50us(void>unsigned char 。ifor(i=0 。i<4 。i+>delay_5us(>。void delay_100us(void>delay_50

11、us(>。delay_50us(>。void time(uint ucMs>uchar j。while(ucMs>0>for(j=0 。j<10。j+> delay_100us(>。ucMs-。2#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar uc10ms,uc1s,Shi,Ge。7/11unsigned char code LEDValue16=0x3f,0x06,0x5b,0x4f

12、,RqS7gWq8Tvp1EanqFDPw 0x66,0x6d,0x7d,0x07,0x7f, 。sbit SEND_RECI_CTRL=P37 。/* 发送接收控制端口 */ void initUart(> 。 /* 串口初始化 */ void time(uint ucMs> 。/* 延时 */void send(>。/* 发送 */void receive(>。 /* 接收 */*主函数 */void main (>/IE=0x87 。/* 除了 ET1 之外,其他中断全开 */TCON=0x05 。/TMOD=0x01 。initUart(> 。tim

13、e(10>。uc10ms=0。uc1s=0。if(SEND_RECI_CTRL>send(>。elsereceive(>。/*发送 */void send( >doP2=0x06。/个位P1=0x06。/十位time(50>。SBUF=0x06。 /* 发送联络信号 */while(TI=0>TI=0 。 /*TI 为发送中断标识, TI=1 表示发完 SBUF中的数据 */while(RI=0>RI=0 。 /*RI 为接收中断标识, RI=1 表示收到发送过来的数据,放入SBUF*/ RqS7gWq8TvDXDiTa9E3dwhile(SBU

14、F0x5b>!=0>。/* 乙 机 未 准 备 好 , 继 续 联络?*/ RqS7gWq8TvRTCrpUDGiTP2=SBUF。P1=SBUF。time(50>。while(1>Ge=LEDValueuc1s%10。Shi=LEDValueuc1s/10。P2=Ge。SBUF=Ge。/看不明白?while(TI=0> 。TI=0 。/?P1=Shi。 SBUF=Shi。8/11while(TI=0> 。TI=0 。/*接收 */void receive(>dowhile(RI=0>RI=0 。P2=SBUF。P1=SBUF。 time(50&

15、gt;。 while(SBUF0x06>!=0> 。 /* 判甲机请求否? */P2=0x5b。P1=0x5b。/什么意思?、time(50>。SBUF=0x5b。/* 发应答信号 */while(TI=0>TI=0。while(1>while(RI=0>RI=0 。P2=SBUF。while(RI=0>RI=0 。P1=SBUF。/*暂停 */void extInterrupt0(void> interrupt 0EA=0。TR0=0。EA=1。/*开启 */void extInterrupt1(void> interrupt 2EA=0

16、。TR0=1。EA=1。/*定时器 0 中断 */void timer0(void> interrupt 1EA=0。TH0=0xDC 。TL0=0x00 。uc10ms+。if(uc10ms=100>/* 定时器 0 溢出一次的时间是 0.01s,100 次就是 1s*/ uc10ms=0。uc1s+。9/11if(uc1s=60>uc1s=0。TR0=1。EA=1。/*初始化串口波特率 */void initUart(void>SCON=0x50。 /* 串口工作在方式 1<10 位 UART ) ,REN=1 允许接收,波特率可以设定 <通过定时器)

17、P212 */RqS7gWq8Tv5PCzVD7HxATMOD=0x21 。 /* 定时器 2 处于方式 2 作为 波特率发生器使用 <方式 2 有自动加载功能,不用重复赋初值)*/ RqS7gWq8TvjLBHrnAILgPCON=0x00。 /*SMOD=0, 波特率不增倍 */TH1=0xfd 。 /* 初值设定,波特率为 9600 可以参考 P217 和 P219、220*/ TCON=0x45。 /*TR1=1, 定时器 2 开*/IE=0x87。/*延时 */void delay_5us(void>_nop_(>。_nop_(>。void delay_50us(void>unsigned char 。ifor(i=0 。i<4 。i+>delay_5us(>。void delay_100us(void>delay_50us(>。delay_50us(>。void time(uint ucMs>uchar j。while(ucMs>0>for(j=0 。j<10。j+> delay_100us(>。ucMs-。10/11申明:所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。申明:所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。11/11

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1