7957|7

1379

帖子

0

TA的资源

裸片初长成(中级)

楼主
 

PIC CCS C语言程序范例 [复制链接]

#include <16c74.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  // Jumpers: 8 to 11, 7 to 12

#include <input.c>

#byte port_b = 6

#define FOUR_PHASE TRUE

#ifdef FOUR_PHASE

byte const POSITIONS[4] = {0b0101,
                           0b1001,
                           0b1010,
                           0b0110};
#else
byte const POSITIONS[8] = {0b0101,
                           0b0001,
                           0b1001,
                           0b1000,
                           0b1010,
                           0b0010,
                           0b0110,
                           0b0100};
#endif


drive_stepper(byte speed, char dir, byte steps) {
   static byte stepper_state = 0;
   byte i;

   for(i=0;i<steps;++i) {
     delay_ms(speed);
     set_tris_b(0xf0);
     port_b = POSITIONS[ stepper_state ];
     if(dir!='R')
       stepper_state=(stepper_state+1)&(sizeof(POSITIONS)-1);
     else
       stepper_state=(stepper_state-1)&(sizeof(POSITIONS)-1);
   }
}

use_pot() {
  byte value;

  setup_adc(adc_clock_internal);
  set_adc_channel( 1 );
  printf("\r\n");

  while( TRUE ) {
    value=read_adc();
    printf("%2X\r",value);
    if(value<0x80)
       drive_stepper(value,'R',8);
    else if(value>0x80)
       drive_stepper(128-(value-128),'F',8);
  }

}


use_switch(byte speed, char dir) {

   byte steps;

   printf("\n\rSteps per press: ");
   steps = gethex();

   while(true) {
      while(input(PIN_B7)) ;
      drive_stepper(speed,dir,steps);
      while(!input(PIN_B7)) ;
      delay_ms(100);
   }
}


main() {

   byte speed,steps;
   char dir;

   setup_port_a(RA0_RA1_ANALOG);

   while (TRUE) {
       printf("\n\rSpeed (hex): ");
       speed = gethex();

       if(speed==0)
          use_pot();

       printf("\n\rDirection (F,R): ");
       dir=getc()|0x20;
       putc(dir);

       printf("\n\rSteps (hex): ");
       steps = gethex();

       if(steps==0)
          use_switch(speed,dir);

       drive_stepper(speed,dir,steps);
   }

}


Seconds Timer

///////////////////////////////////////////////////////////////////////
////                          EX_STWT.C                            ////
////                                                               ////
//// This program uses the RTCC (timer0) and interrupts to keep a  ////
//// real time seconds counter.  A simple stop watch function is   ////
//// then implemented.                                             ////
////                                                               ////
//// Configure the CCS prototype card as follows:                  ////
////     Insert jumpers from: 11 to 17 and 12 to 18.               ////
///////////////////////////////////////////////////////////////////////

#include <16C84.H>

#fuses HS,NOWDT,NOPROTECT

#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_A3, rcv=PIN_A2)


#define INTS_PER_SECOND 76     // (20000000/(4*256*256))

byte seconds;      // A running seconds counter
byte int_count;    // Number of interrupts left before a
   // second has elapsed

#int_rtcc          // This function is called every time
clock_isr() {      // the RTCC (timer0) overflows (255->0).
                   // For this program this is apx 76 times
    if(--int_count==0) {           // per second.
      ++seconds;
      int_count=INTS_PER_SECOND;
    }

}


main() {

   byte start;

   int_count=INTS_PER_SECOND;
   set_rtcc(0);
   setup_counters( RTCC_INTERNAL, RTCC_DIV_256);
   enable_interrupts(RTCC_ZERO);
   enable_interrupts(GLOBAL);

   do {

      printf("Press any key to begin.\n\r");
      getc();
      start=seconds;
      printf("Press any key to stop.\n\r");
      getc();
      printf("%u seconds.\n\r",seconds-start);

   } while (TRUE);

}

Simple A/D

/////////////////////////////////////////////////////////////////////////
////                          EX_ADMM.C                              ////
////                                                                 ////
////  This program displays the min and max of 30 A/D samples over   ////
////  the RS-232 interface.  The process is repeated forever.        ////
////                                                                 ////
////  Configure the CCS prototype card as follows:                   ////
////      Insert jumpers from: 11 to 17, 12 to 18 and 9 to 16        ////
////      Use the #9 POT to vary the voltage.                        ////
/////////////////////////////////////////////////////////////////////////

#include <16C71.H>

#use delay(clock=15000000)
#use rs232(baud=9600,xmit=PIN_A3,rcv=PIN_A2)

main() {

   int i,value,min,max;

   printf("Sampling:");

   setup_port_a( ALL_ANALOG );
   setup_adc( ADC_CLOCK_INTERNAL );
   set_adc_channel( 0 );

   do {
      min=255;
      max=0;
      for(i=0;i<=30;++i) {
         delay_ms(100);
         value = Read_ADC();
         if(value < min)
            min=value;
         if(value > max)
            max=value;
      }
      printf("\n\rMin: %2X  Max: %2X\r\n",min,max);

   } while (TRUE);

}

Output Listing

....................       min=255;
008D:  MOVLW  FF
008E:  MOVWF  28
....................       max=0;
008F:  CLRF   29
....................       incc=TRUE;
0090:  BSF    2B,0
....................       for(i=0;i<=30;++i) {
0091:  CLRF   26
0092:  MOVLW  1F
0093:  SUBWF  26,W
0094:  BTFSC  03,0
0095:  GOTO   0AC
....................          delay_ms(100);
0096:  MOVLW  64
0097:  MOVWF  2C
0098:  GOTO   02D
....................          value = Read_ADC();
0099:  BSF    1F,2
009A:  BTFSC  1F,2
009B:  GOTO   09A
009C:  MOVF   1E,W
009D:  MOVWF  27
....................          if(value < min)
009E:  MOVF   28,W
009F:  SUBWF  27,W
00A0:  BTFSC  03,0
00A1:  GOTO   0A4
....................             min=value;
00A2:  MOVF   27,W
00A3:  MOVWF  28
....................          if(value > max)
00A4:  MOVF   27,W
00A5:  SUBWF  29,W
00A6:  BTFSC  03,0
00A7:  GOTO   0AA
....................             max=value;
00A8:  MOVF   27,W
00A9:  MOVWF  29
....................       }
00AA:  INCF   26,F

00AB:  GOTO   092
....................       if (incc)
00AC:  BTFSC  2B,0
....................         counter++;
00AD:  INCF   2A,F

最新回复

帮我看看我的程序有什么问题?我无法读写EEPROM93LC66B内的数据  详情 回复 发表于 2006-9-3 10:00
点赞 关注
 

回复
举报

1564

帖子

0

TA的资源

禁止发言

沙发
 

Re: PIC CCS C语言程序范例

不懂
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

Re: PIC CCS C语言程序范例

我也用CCS编程,能否请教些问题

 
 
 

回复

1379

帖子

0

TA的资源

裸片初长成(中级)

4
 

Re: PIC CCS C语言程序范例

我也一般就找一些例子做一下 没有自己编写过
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

5
 

Re: PIC CCS C语言程序范例

#ifndef EEPROM_SELECT #define EEPROM_SELECT PIN_C0 #define EEPROM_CLK PIN_C1 #define EEPROM_DI PIN_C2 #define EEPROM_DO PIN_C3 #endif #define EEPROM_ADDRESS long int #define EEPROM_SIZE 512 #define hi(x) (*(&x+1)) void init_ext_eeprom() { BYTE cmd[2]; BYTE i; output_low(EEPROM_DI); output_low(EEPROM_CLK); output_low(EEPROM_SELECT); cmd[0]=0xc0; cmd[1]=0x4; for(i=1;i<=5;++i) shift_left(cmd,2,0); output_high(EEPROM_SELECT); for(i=1;i<=11;++i) { output_bit(EEPROM_DI, shift_left(cmd,2,0)); output_high(EEPROM_CLK); output_low(EEPROM_CLK); } output_low(EEPROM_DI); output_low(EEPROM_SELECT); } void write_ext_eeprom(EEPROM_ADDRESS address, long data) { BYTE cmd[3]; BYTE i; cmd[0]=data; cmd[1]=(BYTE)address; cmd[2]=0xa|hi(address); for(i=1;i<=4;++i) shift_left(cmd,3,0); output_high(EEPROM_SELECT); for(i=1;i<=27;++i) { if(i==4) output_high(EEPROM_SELECT); output_bit(EEPROM_DI, shift_left(cmd,3,0)); output_high(EEPROM_CLK); output_low(EEPROM_CLK); } output_low(EEPROM_DI); output_low(EEPROM_SELECT); delay_ms(11); } BYTE read_ext_eeprom(EEPROM_ADDRESS address) { BYTE cmd[3]; BYTE i; long data; cmd[0]=0; cmd[1]=(BYTE)address; cmd[2]=0xc|hi(address); for(i=1;i<=4;++i) shift_left(cmd,3,0); output_high(EEPROM_SELECT); for(i=1;i<=27;++i) { output_bit(EEPROM_DI, shift_left(cmd,3,0)); output_high(EEPROM_CLK); output_low(EEPROM_CLK); if(i>11) shift_left(&data,1,input(EEPROM_DO)); } output_low(EEPROM_SELECT); return(data); } 这是对93LC66B、EEPROM16位的调用函数,请大家看看有什么问题,
 
 
 

回复

1379

帖子

0

TA的资源

裸片初长成(中级)

6
 

Re: PIC CCS C语言程序范例

先 研究一下
 
 
 

回复

1782

帖子

0

TA的资源

至上芯片

7
 

Re: PIC CCS C语言程序范例

好 顶 L  1
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

8
 

Re: PIC CCS C语言程序范例

帮我看看我的程序有什么问题?我无法读写EEPROM93LC66B内的数据
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表