/************************************
* 芯片:比亚迪 BF7612CMXX
* 功能: 串口模拟发送
*************************************/
//以下头文件可在比亚迪半导体官网下载 [CTK_Library]
#include "BF7612CMXX.h"
#include "BF7612CMXX_API_Timer.h"
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef unsigned char BYTE;
#define SYSCLK_SEL 0 // 系统时钟选择0-12MHz,1-6MHZ,2-4MHz
#if (SYSCLK_SEL == 0)
#define SYSCLK 12 // SYS-12Mhz
#elif (SYSCLK_SEL == 1)
#define SYSCLK 6 // SYS-6Mhz
#elif (SYSCLK_SEL == 2)
#define SYSCLK 4 // SYS-04Mhz
#else
#endif
#define SYS_CLK_SET(x) \
{ \
SYS_CLK_CFG &= ~(0x03); \
SYS_CLK_CFG |= (0x03 & (x << 0)); \
} //(0--12Mhz,1--06Mhz,2--04Mhz)
char g_nSendInx = 0;
char g_nTxdBuff = 0;
char g_nTxdFlag = 0;
#define MY_TXD PD3 //=====自定义TXD引脚=====
#define T_UART_START TR1 = 1
#define T_UART_STOP TR1 = 0
uchar TH1_Reload = 0;
uchar TL1_Reload = 0;
/******************************
自定义串口发送单字符
******************************/
void MyUart_Send(char ch)
{
g_nTxdFlag = 0;
g_nTxdBuff = ch;
T_UART_START; // Start timer
while (g_nTxdFlag == 0)
;
}
/******************************
自定义串口发送字符串
******************************/
void MyUart_String(char *str)
{
int i = 0;
while (*(str + i))
{
g_nTxdFlag = 0;
g_nTxdBuff = *(str + i);
i++;
T_UART_START; // Start Timer
while (g_nTxdFlag == 0)
;
}
}
void Print_Num(char *str, int num)
{
idata char buf[15] = {0}; // max len=15
int cnt = 0;
int i = 0;
int temp = num;
if (num < 0)
temp = -num;
for (i = 0; i < 15; i++)
{
cnt++;
buf[i] = temp % 10 + '0';
temp /= 10;
if (temp == 0)
break;
}
MyUart_String(str);
if (num < 0)
MyUart_Send('-');
while (cnt >= 1)
{
MyUart_Send(buf[cnt - 1]);
cnt--;
}
MyUart_Send('\n'); // end char
}
void MyTimer1_ISP(void)
{
g_nSendInx++; // 发送模拟第几位
if (g_nSendInx == 1)
{
MY_TXD = 0; // 起始位拉低
}
else if (g_nSendInx == 10) // 格式: 9600-8-N-1,完整10Bit数据
{
MY_TXD = 1; // 停止位拉高
T_UART_STOP; // Stop Timer
g_nSendInx = 0;
g_nTxdFlag = 1; /// 发送完成标志位
}
else
{
MY_TXD = g_nTxdBuff & 0x01; // set sbuffer_data
g_nTxdBuff >>= 1;
}
}
void Timer1_Init(uint Timer1Us)
{
EA = 0; // 关总中断;
T1_IP_SET; // 根据实际应运设置优先级
T1_INT_FLAG_CLR; // 清除Timer1中断标志
T1_CT_MODE(0); // Timer1定时/计数模式选择0为定时模式,1为计数模式
T1_MODE_SET(1); // 设置为16位计算器,tiemr1_clk=(1/12)*sys_clk
TH1 = (0xFFFF - ((uint)((Timer1Us * 1.0) * ((SYSCLK * 1.0) / 12.0)))) >> 8;
TL1 = (0xFFFF - ((uint)((Timer1Us * 1.0) * ((SYSCLK * 1.0) / 12.0))));
TH1_Reload = TH1;
TL1_Reload = TL1;
T1_IE_SET; // 开Timer1中断使能
T1_RUN; // 开启Timer1
EA = 1; // 开总中断
}
// INT3 as timer1 isr fuction
void Timer1_ISR() interrupt 3
{
TH1 = TH1_Reload;
TL1 = TL1_Reload;
T1_INT_FLAG_CLR; // 清除Timer1中断标志
MyTimer1_ISP();
}
void main(void)
{
long j = 0;
int loop_cnt = 0;
SYS_CLK_SET(SYSCLK_SEL); // Select sysclk as 12Mhz
WDT_EN = 0X55; // Close WatchDog
// PD3 as txd test
TRISD = ~(1 << 3); // D_Port IOMode 0:Output; 1:input;
Timer1_Init(104); // 定时器1初始化,104us=>9600bps
MyUart_String("===StartTest===\n");
while (1)
{
for (j = 0; j < 150000; j++)
; //在12Mhz下延时1秒
Print_Num("#CNT=",loop_cnt++);
}
}
BYD-BF7612CMXX-UartTimer1.zip
需积分: 5 111 浏览量
2024-05-16
10:57:07
上传
评论
收藏 10KB ZIP 举报
wabil
- 粉丝: 95
- 资源: 42
最新资源
- Transformer 模型主要由以下几个部分组成.docx
- 技嘉Z87X-HD3-f4-nvme
- 数据挖掘-04-外键SQL语句的编写.ev4.rar
- chrome安装包linux版本
- 基于卷积神经网络的农作物病虫害图像识别(.html
- 易舟云:让中小企业财务管理变得触手可及.docx
- html5-event-calendar-open-source-php.20231120.zip
- Captura-v9.0.0.rar (0积分下载 windows 免费录屏工具,制作GIF动图)
- html5-event-calendar-open-source-asp.net-core.20231120.zip
- image_download_1718113345098.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈