智能车制作

标题: CodeWarrior 中怎么指针用不了? 要包含哪个包还是? 谢谢呀~ [打印本页]

作者: chensi291    时间: 2011-1-14 21:25
标题: CodeWarrior 中怎么指针用不了? 要包含哪个包还是? 谢谢呀~
  1. #include <hidef.h> /* common defines and macros */
  2. #include <MC9S12XS128.h> /* derivative information */
  3. #pragma LINK_INFO DERIVATIVE "mc9s12xs128"
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. /*--------函数原型声明----------------*/
  7. void ATD_Init(void);
  8. void Read_AD(uint ch, uchar *ad);
  9. void SetBusCLK_16M(void);
  10. /*-------------主函数-----------------*/
  11. void main(void)
  12. {
  13.   uchar *ad;
  14.   DisableInterrupts;
  15.   SetBusCLK_16M();
  16.   ATD_Init();
  17.   DDRB = 0XFF;
  18.   for(;;)
  19.   {
  20.     Read_AD(0,ad);              // 读取通道0 的AD 值
  21.     PORTB = *ad;                // 读取的AD 值通过 LED 显示出来
  22.   }
  23. }
  24. /*---------------ATD 初始化-------------*/
  25. void ATD_Init(void)
  26. {
  27.   ATD0DIEN=0x00;                // 禁止数字输入
  28.   ATD0CTL1=0x00;                // 不外部触发,8 位分辨率
  29.                                 // ATD0CTL1=0X15;
  30.                                 // ATD 控制寄存器1,写此寄存器会停止当前的转换序列(page 275)
  31.                                 // bit7 外部触发源选择, =1 外部触发源使能 =0 外部触发源禁止
  32.                                 // bit65 AD 分辨率选择位 00-8 位精度 01-10 位精度 10-12 位精度 11-保留
  33.                                 // bit4 =1 采样前放电 =0 采样前不放电
  34.                                 // bit3210 外部触发通道选择 Page 276
  35.   ATD0CTL2=0x40;                // 禁止外部触发, 中断禁止 快速清除标志 0100 0000
  36.                                 // bit7 未生效或者保留
  37.                                 // bit6 AFFC 快速清除标志位
  38.                                 // bit5 外部时钟输入停止模式位
  39.                                 // bit4 外部触发Level/Edge 控制
  40.                                 // bit3 外部触发极性选择
  41.                                 // bit2 外部触发模式使能
  42.                                 // bit1 ATD 转换完成中断使能
  43.                                 // bit0 ATD 比较中断使能
  44.   ATD0CTL3=0x84;                // | DJM | S8C | S4C | S2C || S1C | FIFO | FRZ1 | FRZ0 |
  45.                                 // 右对齐无符号,每次转换4 个序列, No FIFO, Freeze 模式下继续转
  46.                                 // bit7 转换结果对齐模式位 =0 左对齐 =1 右对齐
  47.                                 // bit6543 转换序列长度 就是需要转换的通道数 默认转换序列长度为4 Page 279
  48.                                 // bit2 结果(FIFO First in First out )寄存器先进先出模式位
  49.                                 // bit10 背景调试冻结使能位
  50.                                 // 00 继续转换 01 保留 10 完成当前转换,再冻结 ,11 立即冻结
  51.   ATD0CTL4=0x01;                // 采样时间为4 个ATD 时钟
  52.                                 // bit7-5 采样时钟选择位(page 280)
  53.                                 // bit4-0 PRS[4:0]ATD 时钟预分频位
  54.                                 // 公式: ATDClock=[BusClock]/[2*(PRS+1)] Page 280
  55.   ATD0CTL5=0;                   // bit7 281 页
  56.                                 // bit6 SC 特殊通道转换使能位 =0 特殊通道不使能 =1 特殊通道使能
  57.                                 // bit5 SCAN =1 连续转换 =0 Signal conversion sequence
  58.                                 // bit4 多通道采样模式位 =1 多通道轮流采样 =0 单通道采样
  59.                                 // bit3-0 模拟输入通道选择位 CD CC CB CA 0000-1111 0-16 通道
  60. }
  61. /*---------------读取ATD 的值------------------*/
  62. void Read_AD(uint ch, uchar *ad)
  63. {
  64. ATD0CTL5|=(0X20+ch);            // 禁止特殊通道,扫描模式,单通道采样
  65.                                 // 通道选择 ch 可为 0 1 2 3 4 5 6 7
  66.                                 // 281 页
  67. while(!ATD0STAT0_SCF);          // 等待转换完成
  68. switch(ch)
  69. {
  70.   case 0: *(ad+0)= ATD0DR0L; break;
  71.   case 1: *(ad+1)= ATD0DR1L; break;
  72.   case 2: *(ad+2)= ATD0DR2L; break;
  73.   case 3: *(ad+3)= ATD0DR3L; break;
  74.   case 4: *(ad+4)= ATD0DR4L; break;
  75.   case 5: *(ad+5)= ATD0DR5L; break;
  76.   case 6: *(ad+6)= ATD0DR6L; break;
  77.   case 7: *(ad+7)= ATD0DR7L; break;
  78. }
  79. }
  80. /*-----------------配置系统时钟---------------*/
  81. void SetBusCLK_16M(void)
  82. {
  83.   CLKSEL=0X00;                  // disengage PLL to system
  84.   PLLCTL_PLLON=1;               // turn on PLL
  85.   SYNR=1;
  86.   REFDV=1;                      // pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
  87.   _asm(nop);                    // BUS CLOCK=16M
  88.   _asm(nop);
  89.   while(!(CRGFLG_LOCK==1));     // when pll is steady ,then use it;
  90.   CLKSEL_PLLSEL =1;             // engage PLL to system;
  91. }





复制代码

作者: 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