vk.c

来自「51单片机串口只有一个」· C语言 代码 · 共 81 行

C
81
字号

#include "vk.h"

uchar code BoudTbl[3] = {0x58, 0x48, 0xA8};

/********************************************
使能字串口
********************************************/
void EnVkS(uchar port) {
//	write_reg(port, SIER, 0X01);
	if(port == GPRSPORT)
		write_reg(port, SCTLR, 0XA8);
	if(port == GPSPORT)
		write_reg(port, SCTLR, 0X48);
}

/********************************************
禁止子串口
********************************************/
void DsVkS(uchar port) {
//	write_reg(port, SIER, 0X00);
	if(port == GPRSPORT)
		write_reg(port, SCTLR, 0XA0);
	if(port == GPSPORT)
		write_reg(port, SCTLR, 0X40);
}

/*************************************************
使能子串口发送触点中断
*************************************************/
void EnVkSs(uchar port) {
	write_reg(port, SIER, 0X03);
	//write_reg(port, GIER, 0X10);
}

/*************************************************
禁止子串口发送触点中断
*************************************************/
void DsVkSs(unsigned char port) {
	write_reg(port, SIER, 0X01);
	//write_reg(port, GIER, 0X00);
}

void SetVkBoud(uchar port, uchar n) {	
	write_reg(port, SCTLR, BoudTbl[n]);
}

/************************************************
初始化vk
************************************************/
void init_vk(void) {
	write_reg(GLOBAL, GCR, 0X01);



	//设置字串口数据格式,8位数据 1位停止 无奇偶校验
	write_reg(0, SCONR, 0X00);
	write_reg(1, SCONR, 0X00);

	//
	write_reg(0, SFWCR, 0X0C);

	//设置fifo发送接收触点,清空fifo

	write_reg(1, SFOCR, 0X0F);
	write_reg(0, SFOCR, 0X0C);
	write_reg(1, SFOCR, 0X0C);

	//查看发送接收FIFO中是否有数据,如果有则把FIFO中的数据读出来,
	//使发送接收FIFO中的数据为0
	while(read_reg(0,SFSR))
		read_reg(0,SFDR);


	//设置全局中断,使能字串口0,1中断
	write_reg(GLOBAL, GIER, 0X30);
	
	//设置子串口中断,使能fifo接收触点中断
	write_reg(0, SIER, 0X01);
	write_reg(1, SIER, 0X01);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?