久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
單片機(jī)雙機(jī)主從串行通信源程序 注釋詳細(xì) 原理圖與Proteus仿真
[打印本頁(yè)]
作者:
51黑電子迷
時(shí)間:
2017-5-7 22:45
標(biāo)題:
單片機(jī)雙機(jī)主從串行通信源程序 注釋詳細(xì) 原理圖與Proteus仿真
下面是單片機(jī)主從串行通信的proteus仿真原理圖(工程文件可到本帖附件中下載):
0.png
(40.74 KB, 下載次數(shù): 102)
下載附件
2017-5-7 22:43 上傳
以上仿真完美實(shí)現(xiàn)了單片機(jī)雙機(jī)通信.
單片機(jī)主從串行通信源程序如下:
# include <STC12C5A60S2.h>
# define uchar unsigned char
# define vtime 10000 //定時(shí)3ms,一幀8*3=24ms,頻率=40Hz
# define sub1 0x11
# define sub2 0x12
sbit LED11=P1^0;
sbit LED12=P1^1;
sbit LED21=P1^2;
sbit LED22=P1^3;
uchar over_t=0;
uchar addr=sub1,sum=0,count1,count2;
//uchar i,j,temp,m=0x01;
uchar tn=0; //發(fā)送循環(huán)變量
uchar txdv[3];
void main( )
{
/* //m1:m0 00=標(biāo)準(zhǔn); 01=推挽; 10=輸入; 11=開(kāi)漏輸出
P2M1 = 0X00;
P2M0 = 0Xff;
P1M1 = 0X00;
P1M0 = 0Xff; //設(shè)定P2,P1推挽輸出
P3M1 = 0X0d;
P3M0 = 0X02;
*/ //
SCON = 0xd0;
PCON = 0X80;
TH1 = 0XFd;
TL1 = 0XFd;
IT0 = 1; // 中斷0為邊沿觸發(fā)
IT1 = 1; // 中斷1為邊沿觸發(fā)
TMOD = 0X21; //設(shè)定定時(shí)器0為16位計(jì)數(shù)方式
TH0 = (65536-vtime )/256;
TL0 = (65536-vtime )%256; //賦定時(shí)器0初值
ET0 = 1; //開(kāi)定時(shí)器0中斷
TR0 = 1; //啟動(dòng)定時(shí)器0計(jì)數(shù)
TR1 = 1; //啟動(dòng)定時(shí)器1計(jì)數(shù)
EX1 = 1; //開(kāi)中斷1
EX0 = 1; //開(kāi)中斷0
SM2 = 0;
TB8 = 1;
ES = 1;
EA = 1; //開(kāi)總中斷
while(1);
}
void t0_isp() interrupt 1
{
//uchar dm,wx;
TH0 = (65536-vtime )/256;
TL0 = (65536-vtime )%256; //賦定時(shí)器0初值
if(over_t != 0)
{
over_t--;
if(over_t==30)
{
if(addr==sub1)
{
// LED11=1;
IE0 = 0; //中斷0的源清零
EX0 = 1; //開(kāi)中斷0
}
else
{
// LED21=1;
IE1 = 0; //中斷0的源清零
EX1 = 1; //開(kāi)中斷0
}
}
if(over_t==0)
{
if(addr==sub1)
{
LED11=1;
//IE0 = 0; //中斷0的源清零
//EX0 = 1; //開(kāi)中斷0
}
else
{
LED21=1;
//IE1 = 0; //中斷0的源清零
//EX1 = 1; //開(kāi)中斷0
}
}
}
}
void int0_isp() interrupt 0
{
count1++;
addr=sub1;
sum=sub1;
txdv[0]=addr;
sum=sum+count1;
txdv[1]=count1;
txdv[2]=sum;
TB8=1;
SBUF=sub1;
LED12=1;
LED11=0;
EX0 = 0; // 關(guān)中斷0
over_t=50;
}
void int1_isp() interrupt 2
{
count2++;
addr=sub2;
sum=sub2;
txdv[0]=addr;
sum=sum+count2;
txdv[1]=count2;
txdv[2]=sum;
TB8=1;
SBUF=sub2;
LED22=1;
LED21=0;
EX1 = 0; // 關(guān)中斷0
over_t=50;
}
void uart_isp( ) interrupt 4
{
if(RI==1)
{
RI=0;
if(addr==SBUF)
{
if(addr==sub1)
{
LED12=0;
}
if(addr==sub2)
{
LED22=0;
}
}
}
if(TI==1)
{
tn++;
TI=0;
if(tn>=3)
{
tn=0;
TB8=1;
return;
}
if(tn<3)
{
TB8=0;
SBUF=txdv[tn];
}
}
}
復(fù)制代碼
//#include<reg51.h>
# include <STC12C5A60S2.h>
# define uchar unsigned char
# define vtime 6000 //定時(shí)3ms,一幀8*3=24ms,頻率=40Hz
# define sub1 0x11
# define sub2 0x12
sbit key1=P3^2;
sbit key2=P3^3;
uchar over_t=0;
uchar addr=sub1,sum=0;
//uchar i,j,temp,m=0x01;
uchar code distable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40,0x09};
//位選碼表
uchar code numi[]={0xfe,0xfd,0xfb,0xf7};
//顯示緩存
uchar V_ram[]={17,16,16,0};
uchar wi=0; //位選循環(huán)變量
uchar rn=0; //接收循環(huán)變量
uchar rxdv[3];
void main( )
{
/* //m1:m0 00=標(biāo)準(zhǔn); 01=推挽; 10=輸入; 11=開(kāi)漏輸出
P2M1 = 0X00;
P2M0 = 0Xff;
P1M1 = 0X00;
P1M0 = 0Xff; //設(shè)定P2,P1推挽輸出
P3M1 = 0X0d;
P3M0 = 0X02;
*/ //
SCON = 0xd0;
PCON = 0X80;
TH1 = 0XFd;
TL1 = 0XFd;
IT0 = 1; // 中斷0為邊沿觸發(fā)
IT1 = 1; // 中斷1為邊沿觸發(fā)
TMOD = 0X21; //設(shè)定定時(shí)器0為16位計(jì)數(shù)方式
TH0 = (65536-vtime )/256;
TL0 = (65536-vtime )%256; //賦定時(shí)器0初值
ET0 = 1; //開(kāi)定時(shí)器0中斷
TR0 = 1; //啟動(dòng)定時(shí)器0計(jì)數(shù)
TR1 = 1; //啟動(dòng)定時(shí)器1計(jì)數(shù)
SM2=1;
if(key1==0)
{
addr=sub1;
IE1 = 0; //中斷1的源清零
EX1 = 1; // 開(kāi)啟中斷1
}
if(key2==0)
{
addr=sub2;
IE0 = 0; //中斷0的源清零
EX0 = 1; // 開(kāi)啟中斷0
}
V_ram[0]=addr;
ES=1;
EA = 1; //開(kāi)總中斷
while(1);
}
void t0_isp() interrupt 1
{
uchar dm,wx;
TH0 = (65536-vtime )/256;
TL0 = (65536-vtime )%256; //賦定時(shí)器0初值
dm=distable[V_ram[wi]]; //取顯示段碼
wx=numi[wi]; //取位選碼
P1=0xff; //關(guān)顯示
P2=dm; //段碼賦給P0口
P1=wx; //點(diǎn)亮位選的那個(gè)數(shù)碼管
wi++;
if(wi==4)wi=0;
if(over_t != 0)over_t--;
}
void int0_isp() interrupt 0
{
addr=sub1;
V_ram[0]=addr;
EX0 = 0; // 關(guān)中斷0
IE1 = 0; //中斷1的源清零
EX1 = 1; //開(kāi)中斷1
}
void int1_isp() interrupt 2
{
addr=sub2;
V_ram[0]=addr;
EX1 = 0; // 關(guān)中斷1
IE0 = 0; //中斷0的源清零
EX0 = 1; //開(kāi)中斷0
}
void uart_isp( ) interrupt 4
{
if(RI==1)
{
over_t=100;
RI=0;
rxdv[rn]=SBUF;
//V_ram[1]=rn;
if((rn==0)&&(addr==SBUF))
{
SM2=0;
rn++;
// V_ram[1]=rn;
sum=SBUF;
return;
}
if(rn==2)
{
if(sum==SBUF)
{
V_ram[1]=rxdv[1]/100;
if(V_ram[1]==0)V_ram[1]=0x10;
V_ram[2]=(rxdv[1]%100)/10;
if((V_ram[1]==16)&&(V_ram[2]==0x00))V_ram[2]=0x10;
V_ram[3]=(rxdv[1]%100)%10;
TB8=0;
SBUF=addr;
}
// V_ram[1]=rn;
rn=0;
SM2=1;
return;
}
if(rn==1)
{
rn++;
sum=sum+SBUF;
V_ram[1]=SBUF;
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
最后給大家分享一些我們老師給的一些經(jīng)典的單片機(jī)程序源碼, 一共有十多個(gè).都有詳細(xì)的注釋,然大家快速的理解每一行代碼的意思。而且有proteus仿真原理圖。大家可以直接驗(yàn)證程序的對(duì)錯(cuò).
本系列所有源碼打包下載地址(含proteus仿真工程文件和源程序):
http://m.zg4o1577.cn/bbs/dpj-82474-1.html
本例程下載:
主從串行通信.rar
(88.38 KB, 下載次數(shù): 47)
2017-5-7 22:44 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
hdle
時(shí)間:
2017-5-8 22:36
51黑有你更精彩,向你學(xué)習(xí),尊敬。
作者:
zhanghuiting
時(shí)間:
2017-11-25 22:11
有沒(méi)有匯編程序
作者:
18875856893ljl
時(shí)間:
2017-12-4 20:46
虛心求教學(xué)習(xí)
作者:
LlewynDavis
時(shí)間:
2017-12-14 20:16
資料很好,
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
99热99re6国产在线播放
|
日韩欧美在线视频
|
中文字幕免费在线
|
免费一级黄色片
|
一级特黄毛片
|
日本亚洲欧美
|
国产精品久久久久久久久久久久午夜片
|
99久久视频
|
在线一区
|
久久久久久国产
|
久久亚洲欧美
|
久久天天干
|
4438成人网
|
国产一区二区三区免费
|
久久伊人网站
|
亚洲天堂偷拍
|
欧美国产日韩一区二区
|
麻豆成人免费视频
|
午夜久久久久久久
|
天天综合影院
|
久久夜色精品国产欧美乱极品
|
欧美精品www
|
黄色大片网站
|
亚洲精品久久
|
狠狠干网站
|
国产一级视频在线观看
|
国产美女一区二区
|
欧美日韩三级
|
午夜精品国产
|
亚洲精品网站在线观看
|
97国产视频
|
中文字幕在线观
|
亚洲青青草
|
亚洲www啪成人一区二区麻豆
|
免费看v片
|
久久视频这里只有精品
|
a级片网址
|
成人午夜小视频
|
中文在线观看免费高清
|
欧美日韩精品一区
|
97国产精品
|