资源简介
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
相关资源
- 2007年全国大学生电子设计竞赛一等奖
- 全国电子设计大赛自动寻迹小车论文
- 电子设计大赛电阻精度测量仪.zip
- Arduino电子设计实战指南.零基础篇_超
- 2018年TI杯大学生电子设计竞赛题F-无线
- 1994-2016全国大学生电子设计竞赛仪器
- 2010、2012、2014、2016年TI杯大学生电子
- 九九物联 AFM201T AT 指令集 V1.1 -AF
- 2018年湖南省大学生电子设计竞赛题
- 2016年江苏省电子设计大赛-自动寻迹小
- 全国大学生电子设计竞赛_板球控制系
- 2018年电赛G题f103附带程序
- 2011-2018电子设计大赛通信类优秀设计
- 2015国赛A题满分作品PCB+原理图+程序
- 基于双目视觉的室内标签定位系统(
- msp430驱动fdc2214
- 2009年全国大学生电子设计竞赛优秀作
- 历年全国大学生电子设计竞赛控制类
- [完整版] 全国大学生电子设计竞赛常
- 2019年全国大学生电子设计竞赛 A题 程
- 扫描_2018年湖南省大学生电子设计竞赛
- 2018TI杯大学生电子设计竞赛G题可用资
- 电子设计大赛合集
- 电子技术课程设计报告.docx
- 2017年电子设计竞赛K题源代码单相用电
- 数字幅频均衡功率放大器 软件代码
- 2017年全国大学生电子设计竞赛自适应
- 典型仪器类赛题分析-赵茂泰(2018)
- 全国大学生电子设计大赛培训教程(
- 2018电子设计大赛TI杯D题手势识别 全功
评论
共有 条评论