资源简介
RS485芯片ESD ±20kV 速率高达10MBPS 性价格比极高,有3.3V 5.0V两种电压规格-TDC_Code 使用德国产芯片-TDC-GP2实现两路激光信号时间差的测量,实际项目中使用.zip
代码片段和文件信息
/*2013.9
************************************************
** Time measure using TDC&PIC16F73 **
************************************************
*/
#include
#include
__CONFIG(0x3F36); //开WDT,掉电延迟
#define uchar unsigned char
#define uint unsigned int
#define SS RA5
#define SDO RC5
#define SDI RC4
#define SCK RC3
#define SPI_En() (RA5=0)
#define SPI_Di() (RA5=1)
//#define Tref 250 //250ns@4MHz
//#define N 1 //内部时钟分频
#define _XTAL_FREQ 4000000UL //定义时钟4MHz,用于延时
/**********************global variable definition***************************/
//uchar disp_data; //存储数码管显示的全局变量
uint time=0; //时间差
bit neganum=0; //时间差数值正负标志位
/************************function declaration*******************************/
void init(); //主机初始化
void init_display(); //三位数码管显示初始化
void display(); //数码管显示函数 三位显示时间差 单位为ns
void init_TDC(); //TDC初始化(6个24位寄存器)
uchar spi_transmit(uchar data); //SPI数据传输(启动数据传输,然后等待发送结束,最后返回SSPBUF(读值时使用))
uint read(); //fushu从TDC读测量时间差数据
void write_data(uchar addruchar wdata1uchar wdata2uchar wdata3); //写TDC24位寄存器
void write_opcode(uchar addr); //向TDC寄存器写操作命令
uint invert(uchar m); //二进制转十进制函数
void bit_display_posi(uchar m); //位显示正数
void bit_display_nega(uchar m); //位显示负数
/**********************interrupt service code*******************************/
void interrupt ISR()
{
if(INTE&&INTF) //RB0外部中断服务
{
INTE=0;
INTF=0; //RB0/INT外部中断标志位清零
time=read();
write_opcode(0x70); //发送“Init”初始化GP2以便TDC能够继续接收Start和Stop信号
INTE=1;
}
}
/************************main function************************************/
void main()
{
__delay_ms(100);
init();
init_display();
write_opcode(0x50); //power on reset
__delay_ms(200);
init_TDC(); //初始化TDC
write_opcode(0x07); //发送“Init”初始化GP2以便TDC能够继续接收Start和Stop信号
while(1)
{
CLRWDT(); //喂狗
display();
__delay_us(50);
}
}
void init() //主机初始化
{
ADCON1=0x06; //RA口配置为数字口
TRISA=0x00; //全部作为输出口
TRISB=0x01; //RB0为中断输入口,其他为输出口
TRISC=0x10; //RC4(SDI)引脚为输入其他引脚为输出
OPTION_REG=0x00; //RB0中断下降沿触发
PSA=1; //TIMER0/WDT共用预分频器分配给WDT
PS2=1; //128分频128*18ms大约2.3s
PS1=1;
PS0=1;
//SSPCON=0x22; //00100010,SSPEN=1使能串行端口,CKP=0空闲状态时时钟为低电平,主控模式 时钟=Fosc/64
//SSPSTAT=0x40; //01000000SMP=0CKE=1
//SPI初始化
SSPEN=1; //使能串行接口,并将SCK,SDO,SDI,SS配置为串行引脚
CKP=0; //空闲时钟为低电平
SMP=0; //在数据输出时间的中间采样输入数据
CKE=0; //在SCK上升沿传输数据
SSPM3=SSPM2=SSPM1=SSPM0=0;//SPI主控模式,时钟为Fosc/4
SPI_Di(); //初始时禁止SPI
GIE=1; //开全局中断
PEIE=1; //使能外部中断
INTE=1; //RB0/INT外部中断允许位
}
void init_display() //三位数码管显示初始化
{
ADCON1=0x06; //RA口配置为数字口
TRISA=0x00; //全部作为输出口
TRISB=0x01; //RB0为中断输入口,其他为输出口
TRISC=0x10; //RC4(SDI)引脚为输入其他引脚为输出
PORTC=0x07; //三位数码管选择
PORTB=0x00; //数码管全亮,显示0
PORTA=0x23;
}
void init_TDC() //TDC初始化(写6个24位寄存器)
{
write_data(0X000X000X050X10); //start、stop上升沿有效,测
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7425 2014-10-16 19:07 TDC_Code.c
- 上一篇:爱问共享资料器绿色版.rar
- 下一篇:表格模板-学生日常作息时间表.xls
相关资源
- 2013年电子设计大赛E题
- 电子设计竞赛电子琴制作
- 北京大学 数字电路课程设计报告之
- 北京大学 基于Multisim的八路抢答器的
- 2019_全国大学生电子设计大赛_D题_简易
- 496782016年四川省TI杯大学生电子设计竞
- 电子设计大赛 风力摆源代码
- 2020年TI杯江苏省大学生电子设计竞赛
- 2018电子设计竞赛TI公司ADS1118keil源码
- 2017全国电子设计竞赛微电网模拟系统
- 2011-2017年全国大学生电子设计竞赛综
- 毕业设计电子设计大赛点阵电子显示
- 北京市电子设计大赛模块驱动msp430g
- Altium Designer 电子设计常用元器件集成
- 电子设计大赛高频组常用17大模块——
- 电子设计大赛高频组常用17大模块—
- 2017电子设计大赛论文:滚球控制系统
- 2017年全国大学生电子设计竞赛试题
- 基于stm32的水温控制PID控制源程序-电
- 2017年全国大学生电子设计竞赛综合评
- 强烈推荐新唐工业级ARM9NUC972DF62Y),
- 2018年全国大学生电子设计大赛A题设计
- 2013全国大学生电子设计竞赛综合测评
- 全国电子设计大赛电源类学习规划
- 2015年全国大学生电子设计大赛综合测
- 2015全国大学生电子设计大赛B题,风力
- 全国电子设计大赛技术报告集锦 4篇
- 全国电子设计大赛 简单数控直流电源
- 2012陕西TI电子设计大赛基于430简易直
- 03年全国大赛 智能小车
评论
共有 条评论