经典单片机实用开发教程代码.docx

上传人:b****4 文档编号:5524484 上传时间:2023-05-08 格式:DOCX 页数:20 大小:17.77KB
下载 相关 举报
经典单片机实用开发教程代码.docx_第1页
第1页 / 共20页
经典单片机实用开发教程代码.docx_第2页
第2页 / 共20页
经典单片机实用开发教程代码.docx_第3页
第3页 / 共20页
经典单片机实用开发教程代码.docx_第4页
第4页 / 共20页
经典单片机实用开发教程代码.docx_第5页
第5页 / 共20页
经典单片机实用开发教程代码.docx_第6页
第6页 / 共20页
经典单片机实用开发教程代码.docx_第7页
第7页 / 共20页
经典单片机实用开发教程代码.docx_第8页
第8页 / 共20页
经典单片机实用开发教程代码.docx_第9页
第9页 / 共20页
经典单片机实用开发教程代码.docx_第10页
第10页 / 共20页
经典单片机实用开发教程代码.docx_第11页
第11页 / 共20页
经典单片机实用开发教程代码.docx_第12页
第12页 / 共20页
经典单片机实用开发教程代码.docx_第13页
第13页 / 共20页
经典单片机实用开发教程代码.docx_第14页
第14页 / 共20页
经典单片机实用开发教程代码.docx_第15页
第15页 / 共20页
经典单片机实用开发教程代码.docx_第16页
第16页 / 共20页
经典单片机实用开发教程代码.docx_第17页
第17页 / 共20页
经典单片机实用开发教程代码.docx_第18页
第18页 / 共20页
经典单片机实用开发教程代码.docx_第19页
第19页 / 共20页
经典单片机实用开发教程代码.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

经典单片机实用开发教程代码.docx

《经典单片机实用开发教程代码.docx》由会员分享,可在线阅读,更多相关《经典单片机实用开发教程代码.docx(20页珍藏版)》请在冰点文库上搜索。

经典单片机实用开发教程代码.docx

经典单片机实用开发教程代码

//实例51-2:

定时器T0的模式2测量正脉冲宽度

#include//包含51单片机寄存器定义的头文件

sbitui=P3^2;//将ui位定义为P3.0(INT0)引脚,表示输入电压

/*******************************************

函数功能:

主函数

******************************************/

voidmain(void)

{

TMOD=0x0a;//TMOD=00001010B,使用定时器T0的模式2,GATE置1

EA=1;//开总中断

ET0=0;//不使用定时器T0的中断

TR0=1;//启动T0

TH0=0;//计数器T0高8位赋初值

TL0=0;//计数器T0低8位赋初值

while

(1)//无限循环,不停地将TL0计数结果送P1口

{

while(ui==0)//INT0为低电平,T0不能启动

;

TL0=0;//INT0为高电平,启动T0计时,所以将TL0清0

while(ui==1)//在INT0高电平期间,等待,计时

;

P1=TL0;//将计时结果送P1口显示

}

}

//实例52:

用定时器T0控制输出高低宽度不同的矩形波

#include//包含51单片机寄存器定义的头文件

sbitu=P3^0;//将u位定义为P3.0,从该引脚输出矩形脉冲

unsignedcharCountor;//设置全局变量,储存负跳变累计数

/*************************************************

函数功能:

延时约30ms(3*100*100=30000μs=30ms)

*************************************************/

voiddelay30ms(void)

{

unsignedcharm,n;

for(m=0;m<100;m++)

for(n=0;n<100;n++)

;

}

/*******************************************

函数功能:

主函数

******************************************/

voidmain(void)

{

unsignedchari;

EA=1;//开放总中断

EX0=1;//允许使用外中断

IT0=1;//选择负跳变来触发外中断

Countor=0;

for(i=0;i<100;i++)//输出100个负跳变

{

u=1;

delay30ms();

u=0;

delay30ms();

}

while

(1)

;//无限循环,防止程序跑飞

}

/**************************************************************

函数功能:

外中断T0的中断服务程序

**************************************************************/

voidint0(void)interrupt0using0//外中断0的中断编号为0

{

Countor++;

P1=Countor;

}

//实例53:

用外中断0的中断方式进行数据采集

#include//包含51单片机寄存器定义的头文件

sbitS=P3^2;//将S位定义为P3.2,

/*******************************************

函数功能:

主函数

******************************************/

voidmain(void)

{

EA=1;//开放总中断

EX0=1;//允许使用外中断

IT0=1;//选择负跳变来触发外中断

P1=0xff;

while

(1)

;//无限循环,防止程序跑飞

}

/**************************************************************

函数功能:

外中断T0的中断服务程序

**************************************************************/

voidint0(void)interrupt0using0//外中断0的中断编号为0

{

P1=~P1;//每产生一次中断请求,P1取反一次。

}

//实例54-1:

输出负脉宽为200微秒的方波

#include//包含51单片机寄存器定义的头文件

sbitu=P1^4;//将u位定义为P1.4

/*******************************************

函数功能:

主函数

******************************************/

voidmain(void)

{

TMOD=0x02;//TMOD=00000010B,使用定时器T0的模式2

EA=1;//开总中断

ET0=1;//定时器T0中断允许

TH0=256-200;//定时器T0的高8位赋初值

TL0=256-200;//定时器T0的高8位赋初值

TR0=1;//启动定时器T0

while

(1)//无限循环,等待中断

;

}

/**************************************************************

函数功能:

定时器T0的中断服务程序

**************************************************************/

voidTime0(void)interrupt1using0//"interrupt"声明函数为中断服务函数

{

u=~u;//将P1.4引脚输出电平取反,产生方波

}

//实例54-2:

测量负脉冲宽度

#include//包含51单片机寄存器定义的头文件

sbitu=P3^2;//将u位定义为P3.2

/*******************************************

函数功能:

主函数

******************************************/

voidmain(void)

{

TMOD=0x02;//TMOD=00000010B,使用定时器T0的模式2

EA=1;//开放总中断

EX0=1;//允许使用外中断

IT0=1;//选择负跳变来触发外中断

ET0=1;//允许定时器T0中断

TH0=0;//定时器T0赋初值0

TL0=0;//定时器T0赋初值0

TR0=0;//先关闭T0

while

(1)

;//无限循环,不停检测输入负脉冲宽度

}

/**************************************************************

函数功能:

外中断0的中断服务程序

**************************************************************/

voidint0(void)interrupt0using0//外中断0的中断编号为0

{

TR0=1;//外中断一到来,即启动T0计时

TL0=0;//从0开始计时

while(u==0)//低电平时,等待T0计时

;

P1=TL0;//将结果送P1口显示

TR0=0;//关闭T0

}

//实例55:

方式0控制流水灯循环点亮

#include//包含51单片机寄存器定义的头文件

#include//包含函数_nop_()定义的头文件

unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控制码,该数组被定义为全局变量

sbitP17=P1^7;

/**************************************************************

函数功能:

延时约150ms

**************************************************************/

voiddelay(void)

{

unsignedcharm,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++)

;

}

/**************************************************************

函数功能:

发送一个字节的数据

**************************************************************/

voidSend(unsignedchardat)

{

P17=0;//P1.7引脚输出清0信号,对74LS164清0

_nop_();//延时一个机器周期

_nop_();//延时一个机器周期,保证清0完成

P17=1;//结束对74LS164的清0

SBUF=dat;//将数据写入发送缓冲器,启动发送

while(TI==0)//若没有发送完毕,等待

;

TI=0;//发送完毕,TI被置“1”,需将其清0

}

/*******************************************

函数功能:

主函数

******************************************/

voidmain(void)

{

unsignedchari;

SCON=0x00;//SCON=00000000B,使串行口工作于方式0

while

(1)

{

for(i=0;i<8;i++)

{

Send(Tab[i]);//发送数据

delay();//延时

}

}

}

//实例56-1:

数据发送程序

#include//包含单片机寄存器的头文件

unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

//流水灯控制码,该数组被定义为全局变量

/*****************************************************

函数功能:

向PC发送一个字节数据

***************************************************/

voidSend(unsignedchardat)

{

SBUF=dat;

while(TI==0)

;

TI=0;

}

/**************************************************************

函数功能:

延时约150ms

**************************************************************/

voiddelay(void)

{

unsignedcharm,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++)

;

}

/*****************************************************

函数功能:

主函数

***************************************************/

voidmain(void)

{

unsignedchari;

TMOD=0x20;//TMOD=00100000B,定时器T1工作于方式2

SCON=0x40;//SCON=01000000B,串口工作方式1

PCON=0x00;//PCON=00000000B,波特率9600

TH1=0xfd;//根据规定给定时器T1赋初值

TL1=0xfd;//根据规定给定时器T1赋初值

TR1=1;//启动定时器T1

while

(1)

{

for(i=0;i<8;i++)//模拟检测数据

{

Send(Tab[i]);//发送数据i

delay();//50ms发送一次检测数据

}

}

}

//实例56-2:

数据接收程序

#include//包含单片机寄存器的头文件

/*****************************************************

函数功能:

接收一个字节数据

***************************************************/

unsignedcharReceive(void)

{

unsignedchardat;

while(RI==0)//只要接收中断标志位RI没有被置“1”

;//等待,直至接收完毕(RI=1)

RI=0;//为了接收下一帧数据,需将RI清0

dat=SBUF;//将接收缓冲器中的数据存于dat

returndat;

}

/*****************************************************

函数功能:

主函数

***************************************************/

voidmain(void)

{

TMOD=0x20;//定时器T1工作于方式2

SCON=0x50;//SCON=01010000B,串口工作方式1,允许接收(REN=1)

PCON=0x00;//PCON=00000000B,波特率9600

TH1=0xfd;//根据规定给定时器T1赋初值

TL1=0xfd;//根据规定给定时器T1赋初值

TR1=1;//启动定时器T1

REN=1;//允许接收

while

(1)

{

P1=Receive();//将接收到的数据送P1口显示

}

}

//实例57-1:

数据发送程序

#include//包含单片机寄存器的头文件

sbitp=PSW^0;

unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

//流水灯控制码,该数组被定义为全局变量

/*****************************************************

函数功能:

向PC发送一个字节数据

***************************************************/

voidSend(unsignedchardat)

{

ACC=dat;

TB8=p;

SBUF=dat;

while(TI==0)

;

TI=0;

}

/**************************************************************

函数功能:

延时约150ms

**************************************************************/

voiddelay(void)

{

unsignedcharm,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++)

;

}

/*****************************************************

函数功能:

主函数

***************************************************/

voidmain(void)

{

unsignedchari;

TMOD=0x20;//TMOD=00100000B,定时器T1工作于方式2

SCON=0xc0;//SCON=11000000B,串口工作方式3,

//SM2置0,不使用多机通信,TB8置0

PCON=0x00;//PCON=00000000B,波特率9600

TH1=0xfd;//根据规定给定时器T1赋初值

TL1=0xfd;//根据规定给定时器T1赋初值

TR1=1;//启动定时器T1

while

(1)

{

for(i=0;i<8;i++)//模拟检测数据

{

Send(Tab[i]);//发送数据i

delay();//50ms发送一次检测数据

}

}

}

//实例57-2:

数据接收程序

#include//包含单片机寄存器的头文件

sbitp=PSW^0;

/*****************************************************

函数功能:

接收一个字节数据

***************************************************/

unsignedcharReceive(void)

{

unsignedchardat;

while(RI==0)//只要接收中断标志位RI没有被置"1"

;//等待,直至接收完毕(RI=1)

RI=0;//为了接收下一帧数据,需将RI清0

ACC=SBUF;//将接收缓冲器中的数据存于dat

if(RB8==p)

{

dat=ACC;

returndat;

}

}

/*****************************************************

函数功能:

主函数

***************************************************/

voidmain(void)

{

TMOD=0x20;//定时器T1工作于方式2

SCON=0xd0;//SCON=11010000B,串口工作方式1,允许接收(REN=1)

PCON=0x00;//PCON=00000000B,波特率9600

TH1=0xfd;//根据规定给定时器T1赋初值

TL1=0xfd;//根据规定给定时器T1赋初值

TR1=1;//启动定时器T1

REN=1;//允许接收

while

(1)

{

P1=Receive();//将接收到的数据送P1口显示

}

}

//实例58:

单片机向PC发送数据

#include//包含单片机寄存器的头文件

unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

//流水灯控制码,该数组被定义为全局变量

/*****************************************************

函数功能:

向PC发送一个字节数据

***************************************************/

voidSend(unsignedchardat)

{

SBUF=dat;

while(TI==0)

;

TI=0;

}

/**************************************************************

函数功能:

延时约150ms

**************************************************************/

voiddelay(void)

{

unsignedcharm,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++)

;

}

/*****************************************************

函数功能:

主函数

***************************************************/

voidmain(void)

{

unsignedchari;

TMOD=0x20;//TMOD=00100000B,定时器T1工作于方式2

SCON=0x40;//SCON=01000000B,串口工作方式1

PCON=0x00;//PCON=00000000B,波特率9600

TH1=0xfd;//根据规定给定时器T1赋初值

TL1=0xfd;//根据规定给定时器T1赋初值

TR1=1;//启动定时器T1

while

(1)

{

for(i=0;i<8;i++)//模拟检测数据

{

Send(Tab[i]);//发送数据i

delay();//150ms发送一次数据

}

}

}

//实例59:

单片机接收PC发出的数据

#include//包含单片机寄存器的头文件

/*****************************************************

函数功能:

接收一个字节数据

***************************************************/

unsignedcharReceive(void)

{

unsignedchardat;

while(RI==0)//只要接收中断标志位RI没有被置“1”

;//等待,直至接收完毕(RI=1)

RI=0;//为了接收下一帧数据,需将RI清0

dat=SBUF;//将接收缓冲器中的数据存于dat

returndat;

}

/*****************************************************

函数功能:

主函数

***************************************************/

voidmain(void)

{

TMOD=0x20;//定时器T1工作于方式2

SCON=

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

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2