久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
有沒有DMX512協議解碼的單片機程序?求分享
[打印本頁]
作者:
liu8888
時間:
2024-8-22 10:16
標題:
有沒有DMX512協議解碼的單片機程序?求分享
作者:
huashanhui20
時間:
2024-8-23 07:47
#include<reg2051.h> #define uchar unsigned char #define uint unsigned int #define DmxCH 3 bit DMX_SIGN;// 允許接收起始代碼 bit CHK_SIGN;// 允許接收起始代碼 bit DATA_Flag=0; //bit flag2=0; uint ADDR_CON,RECDAT,READDSS; uchar Dmxdat[DmxCH]; uchar databuff; bit FLASH_flag=0; uchar red,green,bule,lightness=0; sbit r=P1^5; sbit g=P1^6; sbit b=P1^7; /*************************************/ sbit scl=P3^4;//I2C時鐘線 sbit sda=P3^5;//I2C數據線 //sbit flag=P1^7; void DELAY_NOP() //延時5us { uchar a,i; for(i=0;i<10;i++) { a--;a--; } } void DELAY(uchar x) { uchar y; for(;x>0;x--) for(y=200;y>0;y--); } void START() //啟動總線 { scl=0; sda=1; DELAY_NOP(); scl=1; DELAY_NOP(); sda=0; DELAY_NOP(); scl=0; DELAY_NOP(); } void STOP()//停止總線 { scl=0; sda=0; scl=1; DELAY_NOP(); sda=1; DELAY_NOP(); } void ACK() //應答子函數 { uchar i; scl=1; sda=1; for(i=0;i<200;i++) { if(sda==0) { i=200; } } scl=0; DELAY_NOP(); } void fasong8bit(uchar x)//主機發送8位數據 { uchar i; for(i=0;i<8;i++) { scl=0; if((x&0x80)==0)//要發送的位0 { sda=0; } else { sda=1; } scl=1; x<<=1; DELAY_NOP(); } scl=0; } uchar readbyte()//讀出一個字節 { uchar i,x; for(i=0;i<8;i++) { x<<=1; scl=1; DELAY_NOP(); if(sda==1)//如果接收的位是1 { x|=0x01; } else { x|=0x00; } scl=0; } scl=1; return x; } void dingdizhixie(uchar x,y)//指定地址存儲 { START(); fasong8bit(0xa0);//寫 ACK(); fasong8bit(x);//把數據存入45號存儲單元 ACK(); fasong8bit(y);//把要存的數據寫入 ACK(); STOP(); } uchar dingdizhidu(uchar x)//指定地址讀取 { uchar n; START(); fasong8bit(0xa0); ACK(); fasong8bit(x); ACK(); START(); fasong8bit(0xa1);//讀 ACK(); n=readbyte(); ACK(); STOP(); return n; } /*************************************/ void init_serial(void) { TMOD = 0x20; SCON = 0x90; TI = 0; } void pwm() { if(lightness>0) { if(red>0){r=1;red--;}else{r=0;} if(green>0){g=1;green--;}else{g=0;} if(bule>0){b=1;bule--;}else{b=0;} lightness--; } else { lightness=255; red=Dmxdat[0]; green=Dmxdat[1]; bule=Dmxdat[2]; } } void main() { init_serial(); READDSS=dingdizhidu(54); EA=1; ES=1; while(1) { if(FLASH_flag==1) { b=1; b=0; } else { b=0; } g=0; if(DATA_Flag==0) { pwm(); } } } void Serial() interrupt 4 using 2 { databuff=SBUF; RI=0; if(RB8==0) // RB8=0,SBUF=0;復位信號 { CHK_SIGN=0; // 允許接收起始代碼 if(databuff==0) // 判斷是否收到復位信號,是(SUBF=0),否(SUBF=!0) { DMX_SIGN=0; // 允許接收起始代碼 ADDR_CON=0; // 地址號計數器 RECDAT=0; // 數據接收控制 return; } else if(databuff==0xAA) { FLASH_flag=1;//寫地址中斷處理標志位 return; } else { DMX_SIGN=1; // 暫停接收起始代碼 return; } } else { if(FLASH_flag) { READDSS=databuff; dingdizhixie(54,READDSS); DELAY(10); READDSS=dingdizhidu(54); FLASH_flag=0; return; } if(CHK_SIGN==0) // RB8=1,SBUF=0。起始幀 { if (DMX_SIGN==0) { DMX_SIGN=1; if(databuff==0)// 判斷是否起始代碼 { CHK_SIGN=1; // 接下來開始接收數據 DATA_Flag=1; return; // 收到起始代碼而退出中斷 } } return; // 沒有接收到起始代碼而退出中斷 } if(CHK_SIGN==1) // RB8=1,接收數據 { ADDR_CON++; // 地址號計數器加1 if(ADDR_CON >= READDSS) // 判斷當前地址號計數器是否屬于本機地址 { Dmxdat[RECDAT]=SBUF; // 接收數據 RECDAT++; // 下一個數據 if(RECDAT >= DmxCH) // 判斷是否到本機的最后一個通道地址(這里DmxCH=4) { CHK_SIGN=0; // 接收完本機所有通道數,則暫停,等待下一個復位 lightness=0; red=0; green=0; bule=0; DATA_Flag=0; return; } } return; } } }
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
黄色免费在线视频
|
人人射人人干
|
国产欧美日韩在线
|
精品国产乱码久久久久久88av
|
久草福利在线观看
|
久久超
|
伊人综合影院
|
国产午夜三级
|
99re在线观看视频
|
亚洲激情片
|
久久99精品国产麻豆91樱花
|
日韩综合久久
|
五月天婷婷激情
|
精品人伦一区二区三区
|
欧美一区免费
|
天天干天天草
|
久久国产一区二区三区
|
岛国精品在线播放
|
国产欧美精品一区二区色综合
|
亚洲激情综合网
|
日韩一二三
|
国产成人91
|
国产一级黄色
|
97免费在线
|
av网页在线观看
|
国产精品久久久久久久午夜
|
欧美一级片网站
|
91视频专区
|
天堂在线视频tv
|
精品久久免费视频
|
岛国精品在线播放
|
国产第一福利
|
亚洲天堂网址
|
亚洲欧美精品在线
|
久久精品综合
|
性做久久久久久
|
一区二区三区在线观看视频
|
午夜你懂的
|
国产三级在线看
|
欧美区在线
|
中文字幕免费在线观看
|