智能车制作
标题:
CodeWarrior 中怎么指针用不了? 要包含哪个包还是? 谢谢呀~
[打印本页]
作者:
chensi291
时间:
2011-1-14 21:25
标题:
CodeWarrior 中怎么指针用不了? 要包含哪个包还是? 谢谢呀~
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
#define uchar unsigned char
#define uint unsigned int
/*--------函数原型声明----------------*/
void ATD_Init(void);
void Read_AD(uint ch, uchar *ad);
void SetBusCLK_16M(void);
/*-------------主函数-----------------*/
void main(void)
{
uchar *ad;
DisableInterrupts;
SetBusCLK_16M();
ATD_Init();
DDRB = 0XFF;
for(;;)
{
Read_AD(0,ad); // 读取通道0 的AD 值
PORTB = *ad; // 读取的AD 值通过 LED 显示出来
}
}
/*---------------ATD 初始化-------------*/
void ATD_Init(void)
{
ATD0DIEN=0x00; // 禁止数字输入
ATD0CTL1=0x00; // 不外部触发,8 位分辨率
// ATD0CTL1=0X15;
// ATD 控制寄存器1,写此寄存器会停止当前的转换序列(page 275)
// bit7 外部触发源选择, =1 外部触发源使能 =0 外部触发源禁止
// bit65 AD 分辨率选择位 00-8 位精度 01-10 位精度 10-12 位精度 11-保留
// bit4 =1 采样前放电 =0 采样前不放电
// bit3210 外部触发通道选择 Page 276
ATD0CTL2=0x40; // 禁止外部触发, 中断禁止 快速清除标志 0100 0000
// bit7 未生效或者保留
// bit6 AFFC 快速清除标志位
// bit5 外部时钟输入停止模式位
// bit4 外部触发Level/Edge 控制
// bit3 外部触发极性选择
// bit2 外部触发模式使能
// bit1 ATD 转换完成中断使能
// bit0 ATD 比较中断使能
ATD0CTL3=0x84; // | DJM | S8C | S4C | S2C || S1C | FIFO | FRZ1 | FRZ0 |
// 右对齐无符号,每次转换4 个序列, No FIFO, Freeze 模式下继续转
// bit7 转换结果对齐模式位 =0 左对齐 =1 右对齐
// bit6543 转换序列长度 就是需要转换的通道数 默认转换序列长度为4 Page 279
// bit2 结果(FIFO First in First out )寄存器先进先出模式位
// bit10 背景调试冻结使能位
// 00 继续转换 01 保留 10 完成当前转换,再冻结 ,11 立即冻结
ATD0CTL4=0x01; // 采样时间为4 个ATD 时钟
// bit7-5 采样时钟选择位(page 280)
// bit4-0 PRS[4:0]ATD 时钟预分频位
// 公式: ATDClock=[BusClock]/[2*(PRS+1)] Page 280
ATD0CTL5=0; // bit7 281 页
// bit6 SC 特殊通道转换使能位 =0 特殊通道不使能 =1 特殊通道使能
// bit5 SCAN =1 连续转换 =0 Signal conversion sequence
// bit4 多通道采样模式位 =1 多通道轮流采样 =0 单通道采样
// bit3-0 模拟输入通道选择位 CD CC CB CA 0000-1111 0-16 通道
}
/*---------------读取ATD 的值------------------*/
void Read_AD(uint ch, uchar *ad)
{
ATD0CTL5|=(0X20+ch); // 禁止特殊通道,扫描模式,单通道采样
// 通道选择 ch 可为 0 1 2 3 4 5 6 7
// 281 页
while(!ATD0STAT0_SCF); // 等待转换完成
switch(ch)
{
case 0: *(ad+0)= ATD0DR0L; break;
case 1: *(ad+1)= ATD0DR1L; break;
case 2: *(ad+2)= ATD0DR2L; break;
case 3: *(ad+3)= ATD0DR3L; break;
case 4: *(ad+4)= ATD0DR4L; break;
case 5: *(ad+5)= ATD0DR5L; break;
case 6: *(ad+6)= ATD0DR6L; break;
case 7: *(ad+7)= ATD0DR7L; break;
}
}
/*-----------------配置系统时钟---------------*/
void SetBusCLK_16M(void)
{
CLKSEL=0X00; // disengage PLL to system
PLLCTL_PLLON=1; // turn on PLL
SYNR=1;
REFDV=1; // pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
_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;
}
复制代码
作者:
gaoxueze
时间:
2011-2-18 00:32
不知道
作者:
lemon110120
时间:
2011-2-19 14:07
不能在主函数定义指针,只能在子函数定义
作者:
chensi291
时间:
2011-3-11 21:33
回复
3#
lemon110120
不知道为什么,现在又可以了。 在主函数中定义指针没问题,还是谢谢你~
作者:
飞思卡尔835
时间:
2011-10-14 10:35
作者:
ら_卖女孩の火柴
时间:
2015-1-30 20:43
现在我是在开始头文件后定义,遇到问题:Error:c2802:Illegal character found:ASCCⅡ163 AD.c line 4.
作者:
ら_卖女孩の火柴
时间:
2015-1-30 20:44
求解??
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2