熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2020-7-10 15:59
正文摘要:要做一個(gè)數(shù)據(jù)采集傳輸系統(tǒng),采集以做出,不知道怎樣實(shí)現(xiàn)串口通信。下面是找的相似的程序,不知怎么改 #include<reg51.h> unsigned char code Tab[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} void S ... |
ll66m 發(fā)表于 2020-7-11 12:02 如果只有這12位可以不用Tab,直接發(fā)兩個(gè)字節(jié)就好了。 |
ll66m 發(fā)表于 2020-7-11 11:16 會(huì)放了。 |
hsl32 發(fā)表于 2020-7-11 08:14 怎樣把我測(cè)得的十二位數(shù)據(jù)放在Tab里啊 |
hsl32 發(fā)表于 2020-7-11 08:14 好的,我試試 |
ll66m 發(fā)表于 2020-7-10 17:57 你不是讀了溫度,在LCD1液晶上顯示了嘛,把這個(gè)溫度發(fā)出去就好了。MAX6675讀出來(lái)的溫度是12位的,一般占用2個(gè)字節(jié),而串口一次只能發(fā)送一個(gè)字節(jié),所以要發(fā)兩次。先發(fā)高還是低字節(jié)自己定義。串口不是一直發(fā)數(shù)據(jù),而是讀出MAX6675的溫度一次,就發(fā)一次數(shù)據(jù),我要一個(gè)讀好標(biāo)志是因?yàn)樽x溫度和串口發(fā)送是獨(dú)立分開(kāi)的,所以要一個(gè)標(biāo)志告訴串口發(fā)送程序可以發(fā)送了(標(biāo)志要清除,不然會(huì)一直發(fā)不停)。如果讀溫度和串口發(fā)送合在一起就不用標(biāo)志了,也就是讀溫度程序和串口發(fā)送都放在while()里面(還有LCD顯示),讀溫度然后接著串口發(fā)送,一直循環(huán)。 |
2個(gè)蛋騙雞加載同一個(gè)程序,本程序甲乙蛋騙雞互發(fā)數(shù)字在數(shù)碼管中顯示。![]() ![]() |
hsl32 發(fā)表于 2020-7-10 17:21 溫度讀好用代碼怎么表示呀,還有溫度低字節(jié),高字節(jié),清溫度讀好標(biāo)志, |
如果不想保存在單片機(jī)內(nèi)部的話(huà)可以直接將得到的數(shù)據(jù)直接通過(guò)串口發(fā)出去 void Send(unsigned char 采集到的數(shù)據(jù)) { SUBF=采集到的數(shù)據(jù); while(TI==0); TI=0; } 將send函數(shù)放到你程序中的while(1)函數(shù)中不斷輪詢(xún),串口初始化就不用再說(shuō)了,在程序初始化時(shí)加上 |
void Send(unsigned char dat) { SUBF=dat; while(TI==0); TI=0; } |
如果數(shù)據(jù)比較多,可以保留Tab[],數(shù)據(jù)放Tab[]里面 while(溫度讀好) { //清溫度讀好標(biāo)志; for=(i=0;i<個(gè)數(shù);i++) { Send(Tab[i]); // 你的文件少了 [i] dely(); } } |
這是發(fā)送程序,接收的? |
// 1.不要 Tab[] // 2 while(1) 改成: while(溫度讀好) { //清溫度讀好標(biāo)志; P23 = 1; //置485發(fā)送模式 Send(溫度低字節(jié)); dely(); Send(溫度高字節(jié)); } // 接收那邊 U3P20 = 0 ; 置485發(fā)送模式 // 串口接收數(shù)據(jù),2個(gè)字節(jié),判斷一下高低字節(jié)。送顯示。 // 這個(gè)只是簡(jiǎn)單的通訊測(cè)試。實(shí)際應(yīng)用是要有通訊協(xié)議的,一般RS485用Modebus通訊協(xié)議。 |
Powered by 單片機(jī)教程網(wǎng)