求各位谁有STC12C5A60S2单片机第二串口的程序

求各位谁有STC12C5A60S2单片机第二串口的程序,第1张

串口2的初始化程序,我是用STC的“波特率计算工具”生成的:

void UartInit(void) //4800bps@110592MHz

{

AUXR &= 0xf7; //波特率不倍速

S2CON = 0x50; //8位数据,可变波特率

BRT = 0xB8; //设定独立波特率发生器重装值

AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T

AUXR |= 0x10; //启动独立波特率发生器

}

串口2查询方式函数,注意不要开中断:

串口输出数据:

void OutByteS2(int8u k)

{

S2BUF=k;

while(!(S2CON&S2TI));

S2CON&=~S2TI;

}

串口读取数据

int8u GetByteS2(void)

{

while(!(S2CON&S2RI));

S2CON&=~S2RI;

return S2BUF;

}

串口2中断服务程序:

void S2INT() interrupt UART2_INT

{

EA=0;

if(S2CON&S2RI)

{

S2CON&=~S2RI;

//k=S2BUF;

}

if(S2CON&S2TI)

{

S2CON&=~S2TI;

//S2BUF=k;

}

EA=1;

}

STC12C5A60S2是STC公司的单片机产品,是基于51内核的,而我们学习的51单片机就是51内核的,所以,STC12C5A60S2的程序写法与我们学的51的是一样的,所以,C51怎么编写,STC12C5A就怎么编写,中断啊,定时啊等等都是一样的。

区别之处就是,在用C语言写STC12C5A60S2单片机程序的时候,包含STC12C5AH头文件,不要包含REG51H或者REG52H,当然,你包含REG51H或者REG52H也没问题,一样能够编译成功,一样能够运行,但是不够全面,REG51H或者REG52H是传统的51单片机的资源头文件,资源比较少,而STC12C5AH是专门用于stc12C5A的头文件,资源比较全面,这个文件,你在百度文库里下载就有。

#include<STC12C5A60ADh>

#include<intrinsh>

#define uchar unsigned char

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

int ch=0,cl=0,flag=0,V;

void adc();

void delay_2ms(void) //误差 0us

{

unsigned char a,b;

for(b=4;b>0;b--)

for(a=248;a>0;a--);

_nop_; //if Keil,require use intrinsh

}

void delay(void) //误差 0us

{

unsigned char a,b,c;

for(c=167;c>0;c--)

for(b=171;b>0;b--)

for(a=16;a>0;a--);

_nop_; //if Keil,require use intrinsh

}

void main()

{

ADC_CONTR = 0xe8; //设置AD转换

delay_2ms();

P1ASF = 0x01; //P10

AUXR1 = 0; //ADC_RES为高八位

EA = 1; //开总中断

EADC = 1; //开AD转换中断

/

init_LCD();

/

while(1)

{

// adc();

if(flag)

{

EADC=0;//关闭AD转换中断

flag=0;

V=ch5/256; //数据转换 只取低位

// time[0]=V%10;

// time[1]=V/10;

// if(V==0)

EADC=1;

P0=0x01; //标记LED

}

// display();

P2=table[(uchar)V] ; //数码管显示

delay();

P0=0;

}

}

void adc() interrupt 5

{

ADC_CONTR&=0xef; //flag清0

flag=1;

ch=ADC_RES;

cl=ADC_RESL;

ADC_RES=0;

ADC_RESL=0;

ADC_CONTR=0xe8;

delay_2ms;

}

#include<reg51h>

#define uchar unsigned char

sfr AUXR=0x8e;

sfr S2CON=0x9a;

sfr S2BUF=0x9b;

sfr BRT=0x9c;

sfr IE2=0xaf;

#define S2RI=0x01

#define S2TI=0x02

uartinit()

{

S2CON=0x50;

BRT=-12000000/32/9600;

AUXR=0x14;

IE2=0x01;

EA=1;

}

不知你的液晶是什么控制器的,这个是st7920的

/

文件名 : 串行12864显示c

描述 : 该程序实现了12864以串行的方式进行通信。

创建人 : 东流,2009年4月10日

版本号 : 20

/

#include <reg52h>

#include <intrinsh>

#define uchar unsigned char

#define uint unsigned int

sbit CS=P2^5; //片选信号

sbit SID=P2^6; //数据信号

sbit SCLK=P2^7; //时钟信号

sbit RST=P2^2; //复位信号

sbit CH = P2^4; //并行、串行选择信号

/

名称 : delay()

功能 : 延时,延时时间为 100us t。这是通过软件延时,有一定误差。

输入 : t

输出 : 无

/

void delay(unsigned int t)

{

unsigned int i,j;

for(i=0; i<t; i++)

for(j=0; j<10; j++);

}

/

名称 : sendbyte()

功能 : 按照液晶的串口通信协议,发送数据

输入 : zdata

输出 : 无

/

void sendbyte(unsigned char zdata)

{

unsigned int i;

for(i=0; i<8; i++)

{

if((zdata << i) & 0x80)

{

SID = 1;

}

else

{

SID = 0;

}

SCLK = 0;

SCLK = 1;

}

}

/

名称 : write_com()

功能 : 写串口指令

输入 : cmdcode

输出 : 无

/

void write_com(unsigned char cmdcode)

{

CS = 1;

sendbyte(0xf8);

sendbyte(cmdcode & 0xf0);

sendbyte((cmdcode << 4) & 0xf0);

delay(2);

}

/

名称 : write_data()

功能 : 写串口指令

输入 : cmdcode

输出 : 无

/

void write_data(unsigned char Dispdata)

{

CS = 1;

sendbyte(0xfa);

sendbyte(Dispdata & 0xf0);

sendbyte((Dispdata << 4) & 0xf0);

delay(2);

}

/

名称 : lcdinit()

功能 : 初始化函数

输入 : cmdcode

输出 : 无

/

void lcdinit()

{

RST = 0;

delay(100);

RST = 1;

delay(20000);

write_com(0x30);

delay(50);

write_com(0x0c);

delay(50);

}

/

名称 : hzkdis()

功能 : 显示字符串

输入 : s

输出 : 无

/

void hzkdis(unsigned char code s)

{

while(s > 0)

{

write_data(s);

s++;

delay(50);

}

}

/

名称 : Test()

功能 : 显示子函数

输入 : 无

输出 : 无

/

void Test()

{

write_com(0x03);

delay(50);

write_com(0x81);

hzkdis(" HOT-51");

write_com(0x91);

hzkdis("单片机开发板");

write_com(0x89);

hzkdis(" ");

write_com(0x98);

hzkdis(" 东流电子");

}

/

名称 : Main()

功能 : 主函数

输入 : 无

输出 : 无

/

void Main()

{

CH = 0;

delay(1);

lcdinit();

delay(10);

while(1)

{

Test();

delay(5000);

}

}

以上就是关于求各位谁有STC12C5A60S2单片机第二串口的程序全部的内容,包括:求各位谁有STC12C5A60S2单片机第二串口的程序、stc12c5A60S2与c51的编程一样吗,c51怎么编写,stc12c5A60S2就怎么编写,比如中断,定时等等、STC12C5A60S2中的AD转换怎么用,有没有可用的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9469775.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存