整体概貌
单片机型号:C8051F020 技术等级:不懂底层编程的菜鸟 写作目的:加深对底层的了解,方便下一步对FPGA底层配置的实现 编写内容:1. 定时器的定时 2.串口波特率的设定 3.定时器3用作ADC的采样时钟 4.多通道ADC的初始化配置 5.多口配置用作通信 6.晶振倍频的实现 写作流程:1.利用对象的功能实现 2.结合代码的功能实现 3.详细代码实现
详细实现
1.定时器的定时
1.1 使用定时器2设置为自动重装载的16位定时/计数器实现以任意ms为单位的定时1.2 基本概念-原理1.2.1 定时器的捕获和自动重装载的功能的区别 定时器的捕获:类似与外部中断,由电平的跳变沿触发。应用:遥控器的按键对应一连串高低不一/长度不同的电平,通过捕获对电平时长进行解码从而区分不同的按键。 定时器的自动重装载:定时器溢出后自动加载预设的值。1.2.2 定时器的溢出
定时器溢出流程图1.2.3 寄存器配置
CP/RL2=0 计数/定时器工作在自动重装载方式 T2CON=0x0000 0100 仅产生ms为单位的定时,内部系统时钟作为时钟源,工作模式为自动重装载,电平下降沿变化对记数值无影响 TR2=0 允许并启动定时器2 C/T2和T2M 共同决定时钟源的选择 EXEN2=0 T2EX上的电平变化不会忽略 EXEN2=1 T2EX上的负跳变沿将导致定时器2被重新加载,如果中断允许,产生一个中断申请 保存重载值的低字节 PCAP2L 保存重载值的高字节 PCAP2H 16位定时器 T2-----程序中设置为:TMR2 1.3 详细代码实现
void Wait_MS(unsigned int ms)
{
char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = TMR2_PAGE;
TMR2CN = 0x00; // Stop Timer2; Clear TF2;
TMR2CF = 0x00; // use SYSCLK/12 as timebase
RCAP2 = -(SYSCLK/1000/12); // Timer 2 overflows at 1 kHz,now the whole 16bits are all zero.
TMR2 = RCAP2; // The value of PCAP2 loads registers
ET2 = 0; // Disable Timer 2 interrupts
TR2 = 1; // Start Timer 2,learn this expression,this variable belongs to TMR2CN
while(ms)
{
TF2 = 0; // Clear flag to initialize,software to clear
while(!TF2); // Wait until timer overflows
ms--; // Decrement ms
}
TR2 = 0; // Stop Timer 2,creat a close loop
SFRPAGE = SFRPAGE_SAVE; // Restore SFRPAGE
}
寄存器配置的时候需要结合用户手册中的配置寄存器和下位机中的芯片说明进行配置记数初值的计算公式:2^n-clock/12/(1s/t)