#include
#define CR 0x0D
void init_serial (void) { /* 初始化串行接口*/
PINSEL0 = 0x00050000; //设置RxD1和TxD1的使能
U1LCR = 0x83; //8位 1个停止位 无奇偶校验
U1DLL = 97; //9600波特率 15MHz
U1LCR = 0x03; //DLAB = 0;
}
int putchar (int ch) { /* 将字符写入串行端口 */
if(ch == '\n'){
while(!(U1LSR & 0x20)){
U1THR = CR; //输出cr
}
}
while(!(U1LSR & 0x20));
return (U1THR =ch);
}
void puthex (int hex) { //写一个16进制的数值量写给串口
if(hex > 9){
putchar('A' + (hex-10));
}else{
putchar('0' + hex);
}
}
void putstr (char *p) { //利用串口写出一个字符串
while(*p){
putchar(*p++);
}
}
void adc(void) {
unsigned int val;
unsigned int i;
ADCR = 0x012eff01;//开始ad转换
do{
val = ADDR;//读取ad数据的寄存区
}while((val & 0x80000000)==0);//等待ad转换结束
ADCR &=~0x01000000; //停止ad转换
val = (val >> 6) & 0x3FF; //提取的AIN0的值
//利用串口实现将获取的值输出
putstr("\nAIN0 result = 0x");
puthex((val >> 8) & 0x0F);//写第一位的16进制数值
puthex((val >> 16) & 0x1F);//写第二位的16进制数值
puthex((val >> 24) & 0x2F);//写第三位的16进制数值
//调整延时值 可以用我们之前写的delay函数替换
val = (val >> 2) << 12;
for(i = 0; i < val; i++);//延时
}
int main (void) {
ADCR = 0x012eff 01;
init_serial();//串口初始化
while(1){
adc();//开启ad的转换
}
}
我是个初学者,芯片的相关设置还不是很清楚,想问一下这段代码中有什么问题