久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
MSP430單片機異步通信程序(發送),含注釋
[打印本頁]
作者:
七禾頁
時間:
2021-7-24 14:44
標題:
MSP430單片機異步通信程序(發送),含注釋
/*************************
發送數據幀的程序
利用發送中斷,發送過程不阻塞CPU繼續執行后續代碼
Author:七禾頁8
site:創客基地
缺點:必須整幀地發送數據。
需要將一次發送的數據都先整理完畢才能啟動發送,
且必須等待上一幀發完才能啟動下一幀的發送,
不能在程序中隨時地按字節發送數據
**************************/
#include "msp430x14x.h"
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define TXBUF_SIZE 32 //一幀最多能發送的數據字節數
unsigned char TX_BUFF[TXBUF_SIZE]; //發送緩沖區
unsigned char TX_NUM; //發送字節總數變量
unsigned char TX_CNT; //發送字節計數變量
/*******************************
*名稱:UART0_PutFrame()
*功能:從串口發送1幀數據
*入口參數:Ptr:待發送數組的首地址(數組名)
Lenth:數據幀長度
*出口參數:返回1表示成功
返回0表示失敗
*說明:發送過程中,不阻塞CPU運行
********************************/
char UART0_PutFrame(unsigned char*Ptr,unsigned int Lenth)
{
int i;
if(IE1 & UTXIE0)
return (0); //如果上一幀沒發送完,返回0
if(Lenth>TXBUF_SIZE)
return(0); //長度超過最大緩沖區,返回0
for(i=0;i<Lenth;i++)
{
TX_BUFF[i]=Ptr[i]; //待發送數據裝填進入發送緩沖區
}
TX_CNT = 0; //發送字節數清0
TX_NUM = Lenth; //發送字節總數
IFG1 |= UTXIFG0; //人為制造第一次發生中斷
IE1 |= UTXIE0; //允許UART0的發送中斷
return(1); //返回發送成功
}
/*************************
發送中斷
**************************/
#pragma vector = UART0TX_VECTOR
__interrupt void UART0_TX(void) //串口發送中斷
{
U0TXBUF = TX_BUFF[TX_CNT]; //將本次應該發送的數據送入TXBUF
TX_CNT++; //下一次 依次發送后續字節
if(TX_CNT >= TX_NUM) //發送字節計數到達發送總數
{
IE1 &= ~UTXIE0; //禁止UART0的發送中斷,停止發送
}
}
/********************
時鐘初始化
***********************/
void BCS_Init()
{
uchar j;
WDTCTL = WDTPW + WDTHOLD; //關閉看門狗
//使用外部高頻晶體振蕩器
BCSCTL1&=~XT2OFF; //使用外部XT2晶振8M
do{
IFG1&=~OFIFG;
for(j=0XFF;j>0;j--);
}while((IFG1&OFIFG)); //等待晶振震蕩平穩
BCSCTL2|=SELM_2; //MCLK選擇XT2
}
/********************
IO初始化
***********************/
void IO_Init()
{
P3DIR|=BIT4; //P3.4 UTXD0設置為輸出
P3DIR&=~BIT5; //P3.5 URXD0設置為輸入
P3SEL|=BIT4+BIT5; //開啟第二功能 (通信功能)
}
/********************
通信初始化
***********************/
void communication_Init()
{
ME1 |= UTXE0 + URXE0; // 使能USART0收發
UCTL0 |= CHAR + SWRST; // 8-bit 數據,一位停止位 SWRST=1 設置串行口
UTCTL0 |= SSEL0; // 選擇時鐘,UCLK = ACLK,32768
UBR00 = 0x03; // 32k/9600選擇ACLK
UBR10 = 0x00; //
UMCTL0 = 0x4a; // Modulation
UCTL0 &= ~SWRST; // 初始化UART0狀態機,一般要設置好串口之后才復位
P2DIR |= BIT0;
/*************在初始化代碼中增加下面兩句*************/
IE1 |= URXIE0 + UTXIE0; // URXIE0允許接收中斷 + UTXIE0允許發送中斷
_EINT(); //總中斷允許
}
void main( void )
{
uchar TxTestBuff[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
BCS_Init(); //時鐘初始化
IO_Init(); //IO初始化
communication_Init(); //通信初始化
while(1)
{
UART0_PutFrame(TxTestBuff,8); //發送一個長度約為8B的數據幀
__delay_cycles(10000000); //約一秒發送一次
}
}
復制代碼
作者:
w1c2y3
時間:
2021-10-7 22:51
謝謝分享 正在學習中 好東西
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
99久久精品国产一区二区三区
|
99久久精品国产毛片
|
a免费视频
|
黄色a网站
|
免费在线观看黄色片
|
天天干视频
|
欧美午夜理伦三级在线观看
|
成人在线国产
|
亚洲精品911
|
免费的黄色网址
|
日韩中文字幕免费
|
日韩在线免费视频
|
久久精品6
|
国产999视频
|
亚洲人成免费
|
一级毛片黄色
|
天天拍天天干
|
69av在线
|
av黄
|
日韩在线观看
|
日韩视频在线免费观看
|
色妞网站
|
加勒比一区二区三区
|
亚洲三区在线
|
伊人成人在线视频
|
精久久久久
|
久久久久久久97
|
一区二区三区免费在线观看
|
欧美在线观看视频
|
国产三级在线免费观看
|
毛片91
|
欧美一级特黄视频
|
国产色网站
|
成人午夜在线
|
亚洲高清在线视频
|
手机av在线免费观看
|
亚洲天堂久久久
|
高清免费av
|
国产全肉乱妇杂乱视频
|
91亚洲国产成人久久精品麻豆
|
国产福利在线视频
|