历史上的今天
返回首页

历史上的今天

今天是:2024年10月14日(星期一)

正在发生

2019年10月14日 | PIC CCS C语言程序范例

2019-10-14 来源:eefocus

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                              ////

////                                                                 ////

推荐阅读

史海拾趣

Degson Electronics Co Ltd公司的发展小趣事

为了提高产品的品质和可靠性,Degson积极引进国际先进的管理体系和技术标准。公司通过了ISO9001、ISO14001等国际管理体系认证,并严格按照相关标准进行生产和质量管理。此外,Degson还建立了亚洲首家获得美国UL和德国VDE认可的专业实验室,以确保产品的性能和品质符合国际标准。这些举措使Degson的产品在品质上得到了显著提升,赢得了客户的信任和好评。

Fastron公司的发展小趣事

Fastron公司深知产品质量对于企业的重要性。因此,公司建立了严格的质量控制体系,从原材料采购到产品生产、检测等各个环节都实行严格的质量控制和管理。Fastron还引进了先进的检测设备和技术手段,确保每一款产品都符合高标准的质量要求。这种对品质的执着追求使得Fastron的产品在市场上具有极高的竞争力。

EICHHOFF公司的发展小趣事

在快速发展的同时,EICHHOFF公司也积极关注环保和可持续发展问题。公司认识到作为电子行业的一员,必须承担起保护环境、节约资源的责任。为此,EICHHOFF公司采取了一系列措施来降低生产过程中的能耗和排放。例如:引入节能设备和技术、优化生产流程、推广绿色包装等。

此外,EICHHOFF公司还积极参与环保公益活动和社会责任项目,为社会做出积极贡献。这些努力不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

Communications & Power Industries公司的发展小趣事

随着环保意识的日益增强,CPI积极响应国家号召,将绿色环保理念融入公司的经营发展中。公司加大了对环保技术的研发投入,推出了一系列低能耗、低排放的通信设备和电源产品。同时,CPI还加强了对生产过程的环保管理,通过引进先进的环保设备和技术,实现了生产废弃物的减量化、资源化和无害化处理。这些举措不仅提升了CPI的社会形象,也为公司的可持续发展注入了新的动力。

Bellin Dynamic Systems公司的发展小趣事

Bellin Dynamic Systems在电子行业中以其创新技术而著称。某年,公司成功研发出一款高效能、低能耗的芯片,这款芯片在行业内引起了巨大反响。凭借这一技术突破,Bellin Dynamic Systems迅速获得了多家大型电子设备制造商的合作意向,市场份额迅速扩大。公司借此机会加大了研发投入,进一步巩固了其在行业内的技术领先地位。

Amphenol Piher公司的发展小趣事

在面临激烈的市场竞争时,Bellin Dynamic Systems选择与行业内的其他领军企业展开战略合作。通过与这些企业的合作,Bellin Dynamic Systems不仅获得了更多的技术资源和市场渠道,还共同推动了整个行业的发展。这种合作共赢的模式使得Bellin Dynamic Systems在竞争中保持了领先地位。

问答坊 | AI 解惑

检测绝缘栅极双极型晶体管(IGBT)好坏的简易方法

1、判断极性首先将万用表拨在R×1KΩ挡,用万用表测量时,若某一极与其它两极阻值为无穷大,调换表笔后该极与其它两极的阻值仍为无穷大,则判断此极为栅极(G)。其余两极再用万用表测量,若测得阻值为无穷大,调换表笔后测量阻值较小。在测量阻值 ...…

查看全部问答>

很奇怪的问题 wince 串口测试应用程序 writefile(...)函数没有执行完就失败了,然后程序死掉了。

串口测试的writefile(...)函数没有执行完就失败了,没有任何返回结果。writefile的下一个语句做断点,没有执行到。 if(hComm!=INVALID_HANDLE_VALUE&&dwCharToWrite!=0)         {           &nbs ...…

查看全部问答>

终于研发成功

终于研发成功,cpu是s3c2410,64M   SDRAM,网口为cs8900 flash(k9f1208 64m)   实现了只用nand flash 就可以启动引导vxworks. 公司送bsp及全套开发文档 ,另可配公司的开发板 有意着QQ联系641328010 请注明 arm…

查看全部问答>

STC12LE5206AD 程序将引脚置为0 却检测到为高

有谁能够帮忙解决下啊? 本人qq:853887107…

查看全部问答>

RT_THREAD中的异常与中断

  异常是导致处理器脱离正常运行转向执行特殊代码的任何事件,如果系统不及时处理,系统轻则出错,重着导致系统毁灭性的瘫痪。所以正确地处理异常避免错误的发生是提高软件的鲁棒性重要的一方面,对于嵌入式系统更加如此。 异常可以分成两类 ...…

查看全部问答>

DIY导航避障车规整贴

DIY导航避障车小组今日下午展开第一次例会,在本次例会中大家集中讨论了无线的选择,避障的选择等等部分,并对小车进行了前景规划,以谷歌的自动驾驶车为终极目标,大家积极发言例会持续了一个半小时,并表示未来会采用各种新技术。下次再来把细节 ...…

查看全部问答>

11.06【每周讨论】软文——春风化雨、润物无声

您知道“软文”的含义吗?什么,不知道。赶紧百度一下吧,别被OUT了 [ 本帖最后由 longxtianya 于 2011-11-6 20:19 编辑 ]…

查看全部问答>

分享一些收集的msp430方面的书籍

最近接触了一下msp430的单片机从网上搜集了一些书籍希望对大家有帮助。…

查看全部问答>

泰克2012年度春季创新论坛北京站见闻

    4月24日阴雨天气,阿牛哥上午9点去北京朝阳区五洲皇冠大酒店参加泰克2012年度春季创新论坛。热情的工程师们朋友已经在会场里聆听泰克的测试测量行业趋势观点,泰克领先测试测量方案,还有一些工程师朋友在展厅参观泰克最新 ...…

查看全部问答>

全球智能机Q2出货1.5亿部 中兴进前五

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 …

查看全部问答>