📄 huhu.c
字号:
#include <c8051f020.h> // SFR声明
#include <stdio.h>
#include <INTRINS.H>
//C8051F020的16位SFR定义
sfr16 DP = 0x82; // 数据指针
sfr16 TMR3RL = 0x92; // 定时器T3重装值
sfr16 TMR3 = 0x94; // 定时器T3计数器
sfr16 ADC0 = 0xbe; // ADC0数据
sfr16 ADC0GT = 0xc4; // ADC0大于窗口
sfr16 ADC0LT = 0xc6; // ADC0小于窗口
sfr16 RCAP2 = 0xca; // 定时器T2捕捉/重装
sfr16 T2 = 0xcc; // 定时器T2
sfr16 RCAP4 = 0xe4; // 定时器T4捕捉/重装
sfr16 T4 = 0xf4; // 定时器T4
sfr16 DAC0 = 0xd2; // DAC0数据
sfr16 DAC1 = 0xd5; // DAC1数据
#define BAUDRATE 115200 // UART波特率(bps)
#define SYSCLK 24000000 // 系统时钟频率(Hz)
//MAX125功能口定义
#define MAX125_CS P2.0;
#define MAX125_CON P2.1;
#define MAX125_RD P2.2;
#define MAX125_WR P2.3;
#define MAX125_INT P2.4;
#define MAX125_CLK P2.5;
//DAC8164功能口定义
#define DAC8164_LDAC P3.0;
#define DAC8164_ENAB P3.1;
#define DAC8164_A1 P3.2;
#define DAC8164_SYNC P3.3;
#define DAC8164_SCLK P3.4;
#define DAC8164_DIN P3.5;
#define TIMER2H 0xc4 //10ms
#define TIMER2L 0x00
#define TIMER_NUM 8
#define MAX_RAW_VALUE 1024
struct MY_TIMER{
unsigned char enable;
unsigned int count;
unsigned int length;
unsigned char flag;
};
void SYSCLK_Init (void);
void PORT_Init (void);
void UART0_Init (void);
void UART1_Init (void);
void MAX125_Init (void);
void DAC8164_Init (void);
void Timer3_Init (int counts);
void MAX125_ISR (void);
void DAC8164_ISR (void);
//主程序
void main (void)
{
WDTCN = 0xde; // 禁止看门狗
WDTCN = 0xad;
SYSCLK_Init (); // 初始化振荡器
PORT_Init (); // 初始化数据交叉开关和通用I/O口
UART0_Init (); // 初始化UART0
Timer3_Init (SYSCLK/SAMPLE_RATE); // 初始化Timer3
ADC7934_Init (); // 初始化ADC7934
while (1) {
Timer0_Delay (100); //延时100ms
}
ADC7934_ ISR (void);
}
//主程序初始化
//系统时钟初始化
void SYSCLK_Init (void)
{
int i; //延时计数器
OSCXCN = 0x67; //启动外部振荡器
for (i=0;i<256;i++) ; //等待振荡器启动
while (!(OSCXCN & 0x80)) ; //等待晶体振荡器稳定
OSCICN = 0x88; //选择外部振荡器为系统时钟源并使能丢失时钟检测器
}
//I/O口初始化,配置数据交叉开关和通用I/O口
void PORT_Init (void)
{
XBRO = 0x06;
XBR1 = 0x80;
XBR2 = Ox40; // 使能数据交叉开关和弱上拉
P0MDIN = 0x00; // enable TX0 as a push-pull output
P1MDIN = 0x88; // P2口设为推挽方式
P2MDOUT= 0x00; // P2口设为推挽方式
P3MDOUT= 0x00;
P74OUT = 0X0F; // P4,P5口设为推挽方式
}
unsigned char xdata *ADC7934; // 定义ADC7934端口指针
unsigned char xdata *ADC7934data; // 定义ADC7934数据缓冲指针
void ADC7934_PORT (void)
{
}
//UART0配置
void UART0_Init (void)
{
SCON0 = 0x50; // UART0工作模式1, 8-bit UART, 使能RX
TMOD = 0x20; //定时器 1, 模式 2, 8-bit 重装载
TH1 = -(SYSCLK/BAUDRATE/16); //设定定时器1为重装载模式
TR1 = 1; // 启动Timer1
CKCON |= 0x10; // Timer1使用系统时钟
PCON |= 0x80; // 禁止UART0的波特率/2
TI0 = 1; // Indicate TX0 ready
}
//UART0配置
void UART1_Init (void)
{
SCON0 = 0x50; // UART0工作模式1, 8-bit UART, 使能RX
TMOD = 0x20; //定时器 1, 模式 2, 8-bit 重装载
TH1 = -(SYSCLK/BAUDRATE/16); //设定定时器1为重装载模式
TR1 = 1; // 启动Timer1
CKCON |= 0x10; // Timer1使用系统时钟
PCON |= 0x80; // 禁止UART0的波特率/2
TI0 = 1; // Indicate TX0 ready
}
void Timer3_Init (int counts)
{
TMR3CN = 0x02;
TMR3RL = -counts;
TMR3 = 0xffff;
EIE2 &= ~0x01;
TMR3CN |= 0x04;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -