• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: 其他
  • 标签: 电子设计  

资源简介

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

评论

共有 条评论