当前位置: 首页 > news >正文

stc8g1k08a定时读取内部1.2v电压值 vcc电压发送到串口1

1189mv,下载时要勾选在程序区的结束处添加重要测试参数
在这里插入图片描述
在这里插入图片描述

#include "stc8g.h"

void t0_timer_init(){

EA = 1;//总中断控制位,启用中断
	
	//启用定时器0中断
	ET0 = 1;//允许t0中断
	AUXR |= 0x80;			//定时器时钟1T模式 t0不频 t1 12分频
	TMOD &= 0xF0;			//设置定时器模式
	TL0 = 0xCD;				//设置定时初始值 205
	TH0 = 0xD4;				//设置定时初始值 212
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
}

void t1_timer_init(){
	TMOD &= 0xCF; //1100 1111 设置定时器定时器1模式0
	TL1 = 0xE8;			//设置定时初始值
	TH1 = 0xFF;			//设置定时初始值
	TR1=1;//启用定时器1
}

void uart_init(){

ES = 1;//允许串口中断
	SM0 = 0;
	SM1 = 1;//sm0 0 sm1 1 设置串口1工作在模式1,可变波特率8位数据方式
	SM2 = 0;//多机通信模式 模式0和1设置为0
	RI = 0;//接收位标志清零
	TI = 0;//发送位标志清零
	REN = 1;//允许接收数据
}
int t0_c=0;//定时器t0计数
int *BGV;//1.2v指针BGV
void t0() interrupt 1
{
//内部11.0592m晶振 1ms中断一次
	TL0 = 0xCD;				//设置定时初始值 205
	TH0 = 0xd4;				//设置定时初始值 212
	TF0 = 0;				//清除TF0标志
	t0_c++;
	
		if(t0_c%2000==0){
		BGV = (int code *)0x1ff7; 
		SBUF=*BGV>>8;//高位
		while(!TI);
		TI=0;	
		SBUF=*BGV;//低位
		while(!TI);
		TI=0;
	}


}
void main() {
t0_timer_init();//t0定时器初始化
	t1_timer_init();//t1定时器初始化
	uart_init();//串口初始化
	while(1);
	
}

转成字符串发送
在这里插入图片描述

#include "stc8g.h"
#include "stdio.h"
void t0_timer_init(){

EA = 1;//总中断控制位,启用中断
	
	//启用定时器0中断
	ET0 = 1;//允许t0中断
	AUXR |= 0x80;			//定时器时钟1T模式 t0不频 t1 12分频
	TMOD &= 0xF0;			//设置定时器模式
	TL0 = 0xCD;				//设置定时初始值 205
	TH0 = 0xD4;				//设置定时初始值 212
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
}

void t1_timer_init(){
	TMOD &= 0xCF; //1100 1111 设置定时器定时器1模式0
	TL1 = 0xE8;			//设置定时初始值
	TH1 = 0xFF;			//设置定时初始值
	TR1=1;//启用定时器1
}

void uart_init(){

ES = 1;//允许串口中断
	SM0 = 0;
	SM1 = 1;//sm0 0 sm1 1 设置串口1工作在模式1,可变波特率8位数据方式
	SM2 = 0;//多机通信模式 模式0和1设置为0
	RI = 0;//接收位标志清零
	TI = 0;//发送位标志清零
	REN = 1;//允许接收数据
}
void send_string(char dat[]){//发送字符串函数
int c=0;
	while(1){
		if(!dat[c])break;
	SBUF=dat[c];
		while(!TI);
		TI=0;	
		c++;
	}
	
}


int t0_c=0;//定时器t0计数
int *BGV;//1.2v指针BGV
#define USBCHIPID
#define CPUIDBASE   0xfde0
#define VREF_ADDR   (*(unsigned int volatile xdata *)(CPUIDBASE + 0x07))
char internal_ref[1];//储存电压为字符串
void t0() interrupt 1
{
	TL0 = 0xCD;				//设置定时初始值 205
	TH0 = 0xd4;				//设置定时初始值 212
	TF0 = 0;				//清除TF0标志
	t0_c++;
	
		if(t0_c%2000==0){
		BGV = (int code *)0x1ff7; //rom
			send_string("ROM:");
		sprintf(internal_ref,"%d",(*BGV>>8)<<8|*BGV);//转换十进制字符串
		send_string(internal_ref);
		send_string("mv\n");
			send_string("RAM:");
		BGV = (int idata *)0xef;//ram
			sprintf(internal_ref,"%d",(*BGV>>8)<<8|*BGV);//转换十进制字符串
		send_string(internal_ref);
		send_string("mv\n");	
			
			//CHIPID读不出来
			send_string("CHIPID:");
			sprintf(internal_ref,"%d",(VREF_ADDR>>8)<<8|VREF_ADDR);//转换十进制字符串
		send_string(internal_ref);
		
			   
		
	}}

void main() {
t0_timer_init();//t0定时器初始化
	t1_timer_init();//t1定时器初始化
	uart_init();//串口初始化
	while(1);
	
}

vcc电压
3.3v(ams1117 万用表实测3.32v)
5v(ch340的5v供电万用表实测4.59v)
在这里插入图片描述

#include "stc8g.h"
#include "stdio.h"
void ADC15Init()
{
    P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //设置ADC内部时序
    P_SW2 &= 0x7f;

    ADCCFG = 0x3f;//2f左对齐 3f右对齐                          //设置ADC时钟为系统时钟/2/16
    ADC_CONTR = 0x8f;                           //使能ADC模块,并选择第15通道
}

int ADCRead()
{
    int cc;
		int res;

    ADC_CONTR |= 0x40;                          //启动AD转换
    while(cc<111)cc++;//延时
    while (!(ADC_CONTR & 0x20));                //查询ADC完成标志
    ADC_CONTR &= ~0x20;                         //清完成标志
    res = (ADC_RES<<8)|ADC_RESL ;            //读取ADC结果

    return res;
}

void msg_send(char msg[]){//发送字符串函数
	int i=0;
	while(msg[i]){
	SBUF=msg[i];
	while(!TI);
	TI=0;
	i++;
	}
}
	

volatile unsigned int s = 0;// 定时器t0中断计数器
int *BGV;//定义指针变量BGV
void t0_zhongduan(void) interrupt 1
{
	int res;
	int vcc;
	char vcc_char[6];
	ADC15Init();//初始化
	TL0 = 0xCD;				//设置定时初始值 205
	TH0 = 0xd4;				//设置定时初始值 212
	TF0 = 0;				//清除TF0标志
	s++;
	BGV = (int idata *)0xef;//ram 1.2v电压
	res=ADCRead();
	if(s%3000==0){
		s=0;
	 vcc = (int)(1024L * *BGV / res);
		sprintf(vcc_char,"%d",vcc);//以10进制转化为字符串
		msg_send("vcc:");
		msg_send(vcc_char);
		msg_send("mv");
	}

}

void main(){

	EA = 1;//总中断控制位,启用中断
	
	//启用定时器0中断
	ET0 = 1;//允许t0中断
	AUXR |= 0x80;			//定时器时钟1T模式 t0不频 t1 12分频
	TMOD &= 0xF0;			//设置定时器模式
	TL0 = 0xCD;				//设置定时初始值 205
	TH0 = 0xD4;				//设置定时初始值 212
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
	
	//串口控制
	ES = 1;//允许串口中断
	SM0 = 0;
	SM1 = 1;//sm0 0 sm1 1 设置串口1工作在模式1,可变波特率8位数据方式
	SM2 = 0;//多机通信模式 模式0和1设置为0
	RI = 0;//接收位标志清零
	TI = 0;//发送位标志清零
	REN = 1;//允许接收数据
	
	TMOD &= 0xCF; //1100 1111 设置定时器定时器1模式0
	TL1 = 0xE8;			//设置定时初始值
	TH1 = 0xFF;			//设置定时初始值
	TR1=1;//启用定时器1
	
	ADC15Init();//初始化
	ADCRead();//读取adc
	
	while(1);


}

相关文章:

  • 江苏住房和建设厅网站2023年8月疫情又开始了吗
  • 做网站需要准备什么资料北京企业网站推广哪家公司好
  • 西安网站工作室关键词拓展工具有哪些
  • 做网站需完成的软件产品免费推广网站有哪些
  • 本网站服务器设在美国服务器保护西安外包公司排行
  • wordpress 主题 建站河南百度推广电话
  • pycharm 有智能提示,但是没法自动导包,也就是alt+enter无效果
  • JavaScript基础--03-变量的数据类型:基本数据类型和引用数据类型
  • 2025大唐杯仿真3——移动性管理
  • SQL的调优方案
  • WHAT - CSS 伪类
  • 兑换码(Java)
  • 小白速通:Verilog流水线实现及时序分析
  • Mybatis注解开发进阶之复杂的关联查询
  • Nacos注册中心AP模式核心源码分析(集群模式)
  • (一)从零开始:用 LangChain 和 ZhipuAI 搭建简单对话
  • SonarQube数据库配置
  • Flutter之页面布局一
  • Kubernetes 集群搭建(一):k8s 从环境准备到 Calico 网络插件部署(1.16版本)
  • 常见的图像生成算法
  • 堆与二叉树的关系
  • Python四大核心数据结构深度解析:列表、元组、字典与集合
  • STM32F103C8T6实现 SG90 360 °电机转动
  • 积分赛——获取环境温度
  • PyTorch深度学习框架60天进阶学习计划 - 第36天:医疗影像诊断(一)
  • Unhandled exception: org.apache.poi.openxml4j.exceptions.InvalidFormatException