PIC CCS C语言程序范例

发布者:科技驿站最新更新时间:2019-10-14 来源: eefocus关键字:PIC  CCS  C语言  程序范例 手机看文章 扫描二维码
随时随地手机看文章

The CCS C compiler includes a library of example programs for many common applications. Each example program contains a header with instructions on how to run the example, and if necessary, the wiring instructions for interfacing external devices. 

Here are three such example programs included with our compiler, as well as a list file generated by the compiler which shows the assembly generated to correspond with the C code. 

For a full list of example files and source code drivers included with the CCS C compiler go here 

Jump to: Stepper Motor Controller | Seconds Timer | Simple A/D | Example List File | List of Example Files 

Stepper Motor Controller 

 

/////////////////////////////////////////////////////////////////////////

////                        EX_STEP.C                                ////

////                                                                 ////

////  This program interfaces to a stepper motor.  The program will  ////

////  use the RS-232 interface to either control the motor with a    ////

////  analog input, a switch input or by RS-232 command.             ////

////                                                                 ////

////  Configure the CCS prototype card as follows:                   ////

////     Connect stepper motor to pins 47-50 (B0-B3)                 ////

////     Conenct 40 to 54 (pushbutton)                               ////

////     Connect 9 to 15 (pot)                                       ////

////     See additional connections below.                           ////

/////////////////////////////////////////////////////////////////////////

////        (C) Copyright 1996,2001 Custom Computer Services         ////

//// This source code may only be used by licensed users of the CCS  ////

//// C compiler.  This source code may only be distributed to other  ////

//// licensed users of the CCS C compiler.  No other use,            ////

//// reproduction or distribution is permitted without written       ////

//// permission.  Derivative programs created using this software    ////

//// in object code form are not restricted in any way.              ////

/////////////////////////////////////////////////////////////////////////


#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


#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     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("rn");


  while( TRUE ) {

    value=read_adc();

    printf("%2Xr",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("nrSteps 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("nrSpeed (hex): ");

       speed = gethex();


       if(speed==0)

          use_pot();


       printf("nrDirection (F,R): ");

       dir=getc()|0x20;

       putc(dir);


       printf("nrSteps (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.nr");

      getc();

      start=seconds;

      printf("Press any key to stop.nr");

      getc();

      printf("%u seconds.nr",seconds-start);


   } while (TRUE);


}


Simple A/D 

 

/////////////////////////////////////////////////////////////////////////

////                          EX_ADMM.C                              ////

////                                                                 ////

[1] [2]
关键字:PIC  CCS  C语言  程序范例 引用地址:PIC CCS C语言程序范例

上一篇:PIC单片机的C语言使用(一)
下一篇:PIC单片机开发的若干问题

推荐阅读最新更新时间:2024-11-12 12:59

PIC 1508 TIM2的定时器使用
使用TIM2的频率计算公式f=FOSC/4/T2CKPS/T2OUTPS/TMR2 (TMR2是TIM2的数据寄存器) void main() { OSCCON = 0x78;//主频率为16M 即FOSC = 16M __delay_ms(50); ANSC6 = 1; TRISC6 = 0; RC6 = 1;//RC6接了一盏LED T2CON = 0x04; /*T2OUTPS = 0(Timer2 输出后分频比为1:1) TMR2ON=1(Timer2 使能位使能) T2CKPS=0(Timer2 时钟预分频比为1:1);*/ PR2 = 49;/
[单片机]
<font color='red'>PIC</font> 1508 TIM2的定时器使用
怎样使用C语言来编写MSP430的高质量代码
简介:微处理器一般用于特定环境和特定用途,出于成本、功耗和体积的考虑,一般都要求尽量节省使用资源,并且,由于微处理器硬件一般都不支持有符号数、浮点数的运算,且运算位有限,因此,分配变量时必须仔细。另外要说明的是,速度和存储器的消耗经常是2个不可兼顾的目标,在多数情况下,编程者必须根据实际情况作出权衡和取舍。 需要注意的事项如下: 1) 通常在满足运算需求的前提下,尽量选择为变量定义字节少的数据类型。 比如最常用的int和char,int是16位的,char是8位的,如果没有必要,不要使用int,而且使用char也最好使用unsigned char。运行时,可以在变量窗口看到,使用类型为unsigned char的变量是
[单片机]
PIC单片机的应用技巧介绍
1 ICD2作为程序烧写的使用 1.1 ICD2简介 MPLAB ICD2在线调试器是一款低价位的PIC开发工具。它利用Flash工艺芯片的程序区自读写功能来实现仿真器调试功能;使用的软件平台是Microchip的MPLAB IDE(集成开发环境软件包),兼容Windows NT、Windows 2000和Windlows XP等操作系统。其通信接口方式可以是USB(最高可达2Mb/s)或RS-232串行接口方式;工作电压范围为2.O~5.5V,可支持最低2.0V的低压调试。 MPLABICD2可以支持大部分Flash工艺的芯片。它不仅可以用作调试器,同时还可以作为开发型的烧写器使用。 1.2 ICD2作为烧写器时的配置
[单片机]
单片机C语言数组的详细实例程序应用介绍
数组是由具有相同类型的数据元素组成的有序集合。数组是由数组名来表示的,数组中的数据由特定的下标来唯一确定。引入数组的目的,是使用一块连续的内存空间存储多个类型相同的数据,以解决一批相关数据的存储问题。数组与普通变量一样,也必须先定义,后使用。数组在C51语言的地位举足轻重,因此深入地了解数组是很有必要的。下面就对数组进行详细的介绍。 (1)一维数组 一维数组是最简单的数组,用来存放类型相同的数据。数据的存放是线性连续的。 用以下例程说明数组的建立、数据操作: #include /* ----------------------------------------------------- 此程序用以说明数组的建立、数据操作 -
[单片机]
单片机<font color='red'>C语言</font>数组的详细实例<font color='red'>程序</font>应用介绍
语音识别及其定点DSP实现
      语音识别研究的根本目的是研究出一种具有听觉功能的机器,能直接接受人的口呼命令,理解人的意图并做出相应的反映。语音识别系统的研究涉及微机技术、人工智能、数字信号处理、模式识别、声学、语言学和认知科学等许多学科领域,是一个多学科综合性研究领域。近年来,高性能数字信号处理芯片DSP(Digital Signal Process)技术的迅速发展,为语音识别的实时实现提供了可能,其中,AD公司的数字信号处理芯片以其良好的性价比和代码的可移植性被广泛地应用于各个领域。因此,我们采用AD公司的定点DSP处理芯片ADSP2181实现了语音信号的识别。    1 语音识别的基本过程   根据实际中的应用不同,语音识别系统可以分
[嵌入式]
单片机C语言程序设计:10s 的秒表
/* 名称:10s 的秒表 说明:首次按键计时开始,再次按键暂停,第三次按键清零。 */ #include reg51.h #define uchar unsigned char #define uint unsigned int sbit K1=P3^7; uchar i,Second_Counts,Key_Flag_Idx; bit Key_State; uchar DSY_CODE ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //延时 void DelayMS(uint ms) { uchar t; while(m
[单片机]
单片机<font color='red'>C语言</font><font color='red'>程序</font>设计:10s 的秒表
长按键C语言程序
一共用了四个按钮. #define _KEYDOWN_TEST_TIME (20) unsigned char IsKeyDown(volatile unsigned char Value, unsigned char pin) { unsigned long CurState = 0, i; for(i = 0; i _KEYDOWN_TEST_TIME; ++i) CurState += _GET_BIT(Value, pin)? 0:1; //键盘接了上拉电阻,低电平才是按下 if(CurState == _KEYDOWN_TEST_TIME) return 1; return 0; } //以下所有值均是以 De
[单片机]
特色C语言平台 SoC设计最佳化(一)
在设计上能减少结构探索时间的C语言平台,在结构上如何以新思考突破?如何形成一个具有特色的C语言平台,是的SoC设计达到最佳化呢?   以往半导体业者大多使用FPGA(Field Programmable Gate Array)製作样品(Prototype),接着锁定几项晶片重要规格,依此找出最适合该晶片的结构,这种方式最大缺点是作业时间非常冗长。然而,C语言平台的设计方式则是,利用软体模拟分析检讨晶片结构,以往FPGA平台的样品,大约需要半年左右的结构探索时间,如果採用C语言平台的设计方式,只需要花费约2周~1个月的时间。   目前开发最快的是日本冲电气,以ARM为基础的整合平台及设计环境可应用在晶圆专工的先进技术,根据冲电气
[模拟电子]
特色<font color='red'>C语言</font>平台 SoC设计最佳化(一)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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