?? pmpdatat.c
字號(hào):
/*****************************************/
/* Copyright (c) 2005, 通信工程學(xué)院 */
/* All rights reserved. */
/* 作 者:戴 佳 */
/*****************************************/
#include "PMPDataT.h"
/* 延時(shí)t毫秒 */
void delay(uint t)
{
uint i;
while(t--)
{
/* 對(duì)于11.0592M時(shí)鐘,約延時(shí)1ms */
for (i=0;i<125;i++)
{}
}
}
/* 發(fā)送數(shù)據(jù)函數(shù) */
void senddata(uchar *buf)
{
uchar i;
uchar len; // 保存數(shù)據(jù)長(zhǎng)度
uchar ecc; // 保存校驗(yàn)字節(jié)
len = strlen(buf); // 計(jì)算要發(fā)送數(shù)據(jù)的長(zhǎng)度
ecc = len; // 開(kāi)始進(jìn)行校驗(yàn)字節(jié)計(jì)算
/* 發(fā)送數(shù)據(jù)長(zhǎng)度 */
TI = 0;
TB8 = 0; // 發(fā)送數(shù)據(jù)幀
SBUF = len; // 發(fā)送長(zhǎng)度
while(!TI);
TI = 0;
/* 發(fā)送數(shù)據(jù) */
for (i=0;i<len;i++)
{
ecc = ecc^(*buf);
TB8 = 0; // 發(fā)送數(shù)據(jù)幀
SBUF = *buf;
buf++;
while(!TI);
TI = 0;
}
/* 發(fā)送校驗(yàn)字節(jié) */
TB8 = 0; // 發(fā)送數(shù)據(jù)幀
SBUF = ecc;
while(!TI);
TI = 0;
}
/* 串口初始化函數(shù) */
void init_serial()
{
TMOD = 0x20; // 定時(shí)器T1使用工作方式2
TH1 = 250;
TL1 = 250;
TR1 = 1; // 開(kāi)始計(jì)時(shí)
PCON = 0x80; // SMOD = 1
SCON = 0xd0; // 工作方式,9位數(shù)據(jù)位,波特率9600kbit/s,允許接收
}
/* 主程序 */
void main()
{
uchar i = 0;
uchar tmp;
/* 為緩沖區(qū)賦初值 */
P0 = 0xff;
while(P1!=0) // 每隔100ms從P0口讀取,讀取到0表示數(shù)據(jù)采集結(jié)束
{
*(buf+i) = P0;
delay(100); // 延時(shí)100ms
P0 = 0xff;
i++;
}
*(buf+i) = 0; // 緩沖區(qū)最后一個(gè)字節(jié)為0表示數(shù)據(jù)結(jié)束
/* 通過(guò)P0口讀要訪問(wèn)的從機(jī)地址 */
P0 = 0xff;
addr = P0;
init_serial(); // 串口初始化
EA = 0; // 關(guān)閉所有中斷
/* 發(fā)送地址幀并接收應(yīng)答信息,如果接收的信號(hào)與發(fā)送的地址信息不同,則重新發(fā)送地址幀 */
tmp = addr-1;
while(tmp!=addr)
{
/* 發(fā)送從機(jī)地址 */
TI = 0;
TB8 = 1; // 發(fā)送地址幀
SBUF = addr;
while(!TI);
TI = 0;
/* 接收從機(jī)應(yīng)答 */
RI = 0;
while(!RI);
tmp = SBUF;
RI = 0;
}
/* 發(fā)送數(shù)據(jù)并接收校驗(yàn)信息,如果接收到SUCC,表示從機(jī)接收成功,否則將重新發(fā)送該組數(shù)據(jù) */
tmp = ERR;
while(tmp!=SUCC)
{
senddata(buf); // 發(fā)送數(shù)據(jù)
RI = 0;
while(!RI);
tmp = SBUF;
RI = 0;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -