STC12C5A60S2マイコンシリアルポート2の通信機能テスト

マニュアルによれば、STC12C5A60S2シリーズマイコンはreg51.hのヘッダファイルを直接使用できるようですが、対応する特殊機能レジスタを使用する場合は対応する定義を行う必要があります。

ビデオチュートリアルリンクのメモ: https://www.bilibili.com/video/BV1Qq4y1Z7iS/?spm_id_from=333.880.my_history.page.click&vd_source=b91967c499b23106586d7aa35af46413

ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します

テスト用に 2 つのシリアル ポートを開きます。

ここに画像の説明を挿入します

シリアルポート2の受信割り込みを使用するには、シリアルポート2の割り込みイネーブルを追加する必要があります。

 IE2 = 0x01;             //Enable UART2 interrupt

uart2.c のコードは次のとおりです。

#include "uart2.h"

extern void sendByte(unsigned char dat);

void uart2_init(void)  //[email protected]
{
    
    
	AUXR &= 0xF7;		//波特率不倍速
	S2CON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xFB;		//定时器时钟12T模式
	BRT = 0xFD;			//设置定时重载值
	AUXR |= 0x10;		//启动独立波特率发射器
	
	IE2 = 0x01;             //Enable UART2 interrupt
}

void uart2_SendByte(unsigned char dat)
{
    
    
		S2BUF = dat;
		
		while(!(S2CON & S2TI)); // S2CON & S2TI == 0 时,会一直等在这
		S2CON &= ~S2TI;         // 手动清 0
}

#if 0
void uart2_SendString(unsigned char *dat)
{
    
    
		while(*dat != '\0') 
		{
    
    
				uart2_SendByte(*dat++);
		}
}
#endif

char putchar(char c)
{
    
    
	uart2_SendByte(c);
	return c;
}

/*----------------------------
UART2 interrupt service routine
----------------------------*/
void Uart2() interrupt 8
{
    
    
		unsigned char dat;
	
    if (S2CON & S2RI)
    {
    
    
        S2CON &= ~S2RI;     //Clear receive interrupt flag
        dat = S2BUF;
				sendByte(dat);
    }
}

uart2.h のコードは次のとおりです。

#ifndef _UART2_H_
#define _UART2_H_

#include "stc12c5a60s2.h"

#define S2RI  0x01          //S2CON.0
#define S2TI  0x02          //S2CON.1
#define S2RB8 0x04          //S2CON.2
#define S2TB8 0x08          //S2CON.3

// 函数声明
extern void uart2_init(void);
extern void uart2_SendByte(unsigned char dat);
extern void uart2_SendString(unsigned char *dat);


#endif

(シリアルポートのタイムアウト受信に基づくユーザー定義通信プロトコルの実装プログラミング~プロトコル内でのCRC16検証と受信応答処理)をベースにプロジェクトを修正し、コードをCSDNデータベースにアップロードしました。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

12T – 12 で除算 – 12 クロックごとにカウント
1T – 除算なし – 1 クロックごとにカウント

ボーレートは115200に設定されています

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/xuechanba/article/details/131905771
おすすめ