⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c.c

📁 本程序使用STC12C5AXXS2系列单片机
💻 C
字号:
//本程序演示在P1.3输出0~5V的电压
#include<REG51.H>
sfr AUXR=0x8E;//辅助寄存器
sfr BRT=0x9C;//独立波特率发生器
sfr CCON=0xD8;
sfr CMOD=0xD9;//PCA模式寄存器
sfr CL=0xE9;
sfr CH=0xF9;
sfr CCAP0L=0xEA;
sfr CCAP0H=0xFA;
sfr CCAPM0=0xDA;//比较/捕获模块寄存器
sfr CCAPM1=0xDB;
sbit CR=0xDE;
void init_pwm()
{
	CMOD=0x04;//脉宽调制输入时钟为定时器0的溢出率
	CH=0x00;
	CL=0x00;
	CCAP0L=0xCC;//占空比为C0/100=10%
	CCAP0H=0xCC;
	CCAPM0=0x42;//8位脉宽调制,无中断
	AUXR=AUXR|0x80;//定时器0以1T方式工作
	TMOD=0x02;//定时器0以方式2工作
	TH0=240;//输出矩形波频率=晶振频率/256/(256-240)
	TL0=240;
	TR0=1;//定时器0开始工作
	CR=1;//CCP0开始工作
}
void init_rs232()
{
	AUXR=AUXR|0x01;//串口1使用独立波特率发生器
	SCON=0x50;//串口以方式1工作
	BRT=230;//波特率=晶振频率/12/32/(256-BRT)
	ES=0;//禁止串口中断
	AUXR=AUXR|0x10;//BRT开始工作
}
void send_byte(unsigned char x)//发送一个字节
{
	TI=0;
	SBUF=x;
	while(!TI)
		;
	TI=0;
}
void main()
{
	unsigned int vc;//以整数表示的电压值
	float vf;//以浮点表示的电压值
	init_pwm();//初始化脉宽调制
	init_rs232();//初始化串口
	while(1)
	{
		while(!RI)//等待串口接收字节
			;
		CCAP0H=0xFF-SBUF;//CCAP0H的值越大,占空比越小
		RI=0;
		vf=1.0*(0xFF-CCAP0H)/0xFF*5;//根据占空比,换算出电压值
		vc=100*vf;//扩大100倍,转换为整数
		send_byte(0x30+vc/100);//通过串口发送变量vc,格式为“X.XXV ”
		send_byte('.');
		send_byte(0x30+vc%100/10);
		send_byte(0x30+vc%10);
		send_byte('V');
		send_byte(' ');
	}
}

⌨️ 快捷键说明

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