我的源码库:
来源:互联网 发布:河南云和数据 编辑:程序博客网 时间:2024/06/01 09:39
I:setbusclock
// PLL初始化子程序 BUS Clock=16M
void setbusclock(void)
{
CLKSEL=0X00; // disengage PLL to system
PLLCTL_PLLON=1; // turn on PLL
SYNR=0x00 | 0x01; // VCOFRQ[7:6];SYNDIV[5:0]
// fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1)
// fPLL= fVCO/(2 × POSTDIV)
// fBUS= fPLL/2
// VCOCLK Frequency Ranges VCOFRQ[7:6]
// 32MHz <= fVCO <= 48MHz 00
// 48MHz < fVCO <= 80MHz 01
// Reserved 10
// 80MHz < fVCO <= 120MHz 11
REFDV=0x80 | 0x01; // REFFRQ[7:6];REFDIV[5:0]
// fREF=fOSC/(REFDIV + 1)
// REFCLK Frequency Ranges REFFRQ[7:6]
// 1MHz <= fREF <= 2MHz 00
// 2MHz < fREF <= 6MHz 01
// 6MHz < fREF <= 12MHz 10
// fREF > 12MHz 11
// pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
POSTDIV=0x00; // 4:0, fPLL= fVCO/(2xPOSTDIV)
// If POSTDIV = $00 then fPLL is identical to fVCO (divide by one).
_asm(nop); // BUS CLOCK=16M
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;
}
II:setbusclock
void Dly_ms(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<2670;jj++); //busclk:16MHz--1ms
}
III :SCI查询
static void SCI_Init(void)
{
SCI0CR2=0x2c; //enable Receive Full Interrupt,RX enable,Tx enable
SCI0BDH=0x00; //busclk 8MHz,19200bps,SCI0BDL=0x1a
SCI0BDL=0x68; //SCI0BDL=busclk/(16*SCI0BDL)
//busclk 16MHz, 9600bps,SCI0BDL=0x68
}
void uart_putchar(unsigned char ch)
{
if (ch == '/n')
{
while(!(SCI0SR1&0x80)) ;
SCI0DRL= 0x0d; //output'CR'
return;
}
while(!(SCI0SR1&0x80)) ; //keep waiting when not empty
SCI0DRL=ch;
}
void putstr(char ch[])
{
unsigned char ptr=0;
while(ch[ptr]){
uart_putchar((unsigned char)ch[ptr++]);
}
//putstr("/nLongQiu s.&t. Co. Ltd.");
// putstr("/nhttp://shop36265907.taobao.com");
//接收为中断模式
unsigned char uart_getkey(void)
{
byte res=0;
while(!(SCI0SR1&0x80)) ; //keep waiting when not empty
return (SCI0DRL);
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 20 SCI0_ISR(void)
{
SCI0CR2_RIE=0;
//此处为串口中断需要处理的事情
uart_putchar(uart_getkey());
PORTA_PA0=~PORTA_PA0;
SCI0CR2_RIE = 1;
}
IV:RTI
static void RTI_Init(void)
{
RTICTL=0x77; //8x2^16 =>32,75ms,30.5175Hz
//CRGINT=0X80; //enable RTI Interrupt
CRGINT=0X80; //enable RTI Interrupt
}
void interrupt 7 RTI_ISR(void) { // 32.75ms timer overflow
++u32_time_cnt;
PORTB_PB2=~PORTB_PB2;
CRGFLG|=0X80;//Write 1 to clear RTIF bit
}
V:Port_Init
static void Port_Init(void)
{
DDRA = 0xff;
PORTA= 0x00;
DDRB = 0xff; //LED PTB0--7,
PORTB= 0xff; //LEDs off
}
VI:AD
void AD_Init(void)
{
ATD0CTL1=0x00; //7:1-外部触发,65:00-8位精度,4:放电,3210:ch
ATD0CTL2=0x40; //禁止外部触发, 中断禁止
ATD0CTL3=0xa0; //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转
ATD0CTL4=0x01; //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1]
ATD0CTL5=0x30; //6:0特殊通道禁止,5:1连续转换 ,4:1多通道轮流采样
ATD0DIEN=0x00; //禁止数字输入
}
byte ReadATD(byte ch)
{
byte ad=0;
while(!ATD0STAT0_SCF);
switch(ch)
{
default:
case 0:
ad= ATD0DR0L;
break;
case 1:
ad= ATD0DR1L;
break;
case 2:
ad= ATD0DR2L;
break;
case 3:
ad= ATD0DR3L;
break;
case 4:
ad= ATD0DR4L;
break;
case 5:
ad= ATD0DR5L;
break;
case 6:
ad= ATD0DR6L;
break;
case 7:
ad= ATD0DR7L;
break;
}
return ad;
}
////
value=ReadATD(0) *100/51;//参考电压5V, 500/255
- 我的源码库:
- 我的新项目,魔兽世界源码
- 我常去的源码网站
- 我的AutoComplete--有源码
- 令我费解的源码
- 谷歌“我的足迹”源码
- 我的源码阅读论
- 我以为的源码---Integer
- 线程池我修正的源码 MFC
- 我的第一个WML页面源码
- 我的第一个多线程源码
- 软件源码开放我的看法
- 线程池我修正的源码 MFC
- 我常用的源码下载站
- 诸多源码,正是我想要的
- 我的android应用-HiBabyDragon(三) - 源码
- phpcmsv9源码解析 我的面板
- 开始我的源码之旅
- Jquey 重拾之路之一_JS错误机制
- [C] 如何用C实践Timer
- jquery重拾之路二_优化、执行效率
- JBPM3的对象介绍
- RPT & LR
- 我的源码库:
- Visual C++ 基本原理
- Android
- 添加Eclipse自带的“保存”菜单及按钮
- DateTime 数字型
- POJ Occurrence of Digits
- ZOJ2833 并查集
- 有个人或公司使用Windows Azure的吗?
- VC常见错误