这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » kf94297的试用手记

共12条 1/2 1 2 跳转至

kf94297的试用手记

助工
2010-12-03 13:16:21     打赏

首先,试用手记的帖子我先开了,后面慢慢把东西跟上。

前期的对Easykit 开发环境的熟悉及初期的小调试,还是挺顺利的,有点小问题都在各各高手帖子里面找到了答案。

对于试用手记,已经有很多了,里面对Easykit的相关前期调试准备都有了详细的介绍,我也是跟着各位高手的脚步,踩过去的。

最近在找富士通单片机的汇编手册(因为我比较习惯用汇编的)到时候会跟大家分享分享。

敬请期待。




关键词: kf94297     试用     手记    

助工
2010-12-12 21:12:01     打赏
2楼

乖乖  写了一下 错一大堆啊
看来结构格式也有很大的差别啊
有没有哪位大侠有范例啊


助工
2010-12-12 21:55:13     打赏
3楼

再看看资料
就不信搞不出来


助工
2010-12-19 18:25:19     打赏
4楼

PDR0 EQU 0000H;
DDR0 EQU 0001H;
PDR6 EQU 000CH;
DDR6 EQU 000DH;

MAIN:
CLRB DDR0:6;
MOV PDR0,#01000000B;
CLRB DDR6:2;
CLRB DDR6:3;
MOV PDR6,#00001100B;
ENDS
END
上面的是程序 最简单的了

Now Compile/Assemble...
--------------------Configuration: NEW.prj - Debug--------------------
Text1.asm
*** E:\lin的资料\单片机相关\NEW\Text1.asm(1) E4502A: Out of section
*** E:\lin的资料\单片机相关\NEW\Text1.asm(1) E4600A: Invalid operation mnemonic (EQU)
*** E:\lin的资料\单片机相关\NEW\Text1.asm(2) E4600A: Invalid operation mnemonic (EQU)
*** E:\lin的资料\单片机相关\NEW\Text1.asm(3) E4600A: Invalid operation mnemonic (EQU)
*** E:\lin的资料\单片机相关\NEW\Text1.asm(4) E4600A: Invalid operation mnemonic (EQU)
*** E:\lin的资料\单片机相关\NEW\Text1.asm(7) E4600A: Invalid operation mnemonic (DDR0)
*** E:\lin的资料\单片机相关\NEW\Text1.asm(8) E4600A: Invalid operation mnemonic (PDR0)
*** E:\lin的资料\单片机相关\NEW\Text1.asm(9) E4525A: Duplicate definition (CLRB)
*** E:\lin的资料\单片机相关\NEW\Text1.asm(9) E4600A: Invalid operation mnemonic (DDR6)
*** E:\lin的资料\单片机相关\NEW\Text1.asm(10) E4525A: Duplicate definition (CLRB)
*** E:\lin的资料\单片机相关\NEW\Text1.asm(10) E4600A: Invalid operation mnemonic (DDR6)
*** E:\lin的资料\单片机相关\NEW\Text1.asm(11) E4525A: Duplicate definition (MOV)
*** E:\lin的资料\单片机相关\NEW\Text1.asm(11) E4600A: Invalid operation mnemonic (PDR6)
------------------------------
Error detected.
------------------------------
编译完后这么多错误


应该是工程中编译环境设定错了
请高手们指点一下
关于富士通汇编的哪些参数要设置的
有没有有工程范例
还有软件环境设置说明
希望快点得到回复
谢谢

 


助工
2010-12-20 08:40:56     打赏
5楼
OK  谢谢 汇编资料上面没有关于这方面的问题
我还在找其他的资料
实在不行的话我只能用C语言了
过过心里还是有个坎 感觉就是不搞出来就是不舒服
我还是觉得汇编的比较习惯

助工
2010-12-20 15:26:37     打赏
6楼

是啊
C语言会是最终的结果

已经知道了 富士通的文件必须要有启动文件什么的
还是用C测试一下吧


助工
2010-12-22 01:37:46     打赏
7楼

下面是关于 开发板IO的测试
循环LED灯(板自带 红、绿、蓝)闪烁。
熟悉后感觉还是蛮方便的,下面是源程序:
#include "mb95200.h"
unsigned int k=0;

void Delay (unsigned int i)  //延时程序
{
unsigned int m,n;
for(m=0;m<i;m++)
 {
 for(n=0;n<6000;n++)
 asm("\tNOP");
 }
}

void LED (unsigned int j)  //LED灯(自带)控制程序
{
DDR0_P06 = 1;    // set P0_P00 output(IO口定义:输出)
DDR6_P62 = 1;    // set P6_P62 output(IO口定义:输出)
DDR6_P63 = 1;    // set P6_P62 output(IO口定义:输出)
switch(j)
 {
case 1: PDR0_P06 = 0;   //输出状态定义:0表示灯亮(红灯)
  break;
case 2: PDR0_P06 = 1;   //输出状态定义:1表示灯灭(红灯)
  break;
case 3: PDR6_P62 = 0;   //输出状态定义:0表示灯亮(绿灯)
  break;
case 4: PDR6_P62 = 1;   //输出状态定义:1表示灯灭(绿灯)
  break;   
case 5: PDR6_P63 = 0;   //输出状态定义:0表示灯亮(蓝灯)
  break;
case 6: PDR6_P63 = 1;   //输出状态定义:1表示灯灭(蓝灯)
  break;
default:k=0;
  break;
 }
}

void main (void)   //主程序(死循环)
{
while(1)
 {
 k++;
 LED (k);
 Delay (3);
 }
}


助工
2010-12-28 14:58:33     打赏
8楼

本来还在测试那个DS18B20 温度的
让它读取后显示在数码管上的
但是调来调去就是不行
都快晕死了


助工
2010-12-28 15:04:34     打赏
9楼

#include "mb95200.h"


#define PDR_DS PDR6_P64
#define DDR_DS DDR6_P64

unsigned char start;
unsigned char read_data_H=0,read_data_L=0;
unsigned char data_int,data_dec,sign;
unsigned int disp_int,disp_int1,disp_int2,disp_int3;
unsigned int disp_dec,disp_dec1,disp_dec2;
unsigned char dsip_data;

/*DS_delay */
void Delay_250ms(void)
{
unsigned char i,j,k;
for(i=0;i<250;i++)
for(j=0;j<3;j++)
for(k=0;k<220;k++);
}

void Delay_600us(void)
{
unsigned char i,j,k;
for(i=0;i<6;i++)
for(j=0;j<1;j++)
for(k=0;k<63;k++);
}

void Delay_200us(void)
{
unsigned char i,j,k;
for(i=0;i<1;i++)
for(j=0;j<1;j++)
for(k=0;k<128;k++);
}

void Delay_40us(void)
{
unsigned char i,j,k;
for(i=0;i<2;i++)
for(j=0;j<1;j++)
for(k=0;k<9;k++);
}

void Delay_20us(void)
{
unsigned char i,j,k;
for(i=0;i<1;i++)
for(j=0;j<1;j++)
for(k=0;k<8;k++);
}

void Delay_10us(void)
{
unsigned char i,j,k;
for(i=0;i<1;i++)
for(j=0;j<1;j++)
for(k=0;k<1;k++);
}

/*DS_rest*/
unsigned char DS_rest(void)
{
DDR_DS=1;//set io output
PDR_DS=1;
PDR_DS=0;//pull ds line low
Delay_600us();//leave it low for 600us
PDR_DS=1;//allow line to return high
Delay_40us();//40us
DDR_DS=0;//set io input
Delay_200us();//wait for end of timeslot 200us
while(!PDR_DS);
return(PDR_DS);//rest_date signal returned(1:no part)
}

/*DS_read_bit*/
unsigned char read_bit(void)
{
PDR_DS=1;
DDR_DS=1;//set io output
PDR_DS=0;
DDR_DS=0;//set io input
Delay_20us();//20us
return(PDR_DS); // return value of PDR_DS line
}

/*DS_write_bit*/
void write_bit(char bitval)
{
PDR_DS=1;
DDR_DS=1;//set io output
PDR_DS=0;//pull DQ low to start timeslot
if(bitval==1) PDR_DS=1; // return PDR_DS high if write 1
Delay_20us();//20us hold value for remainder of timeslot
PDR_DS=1;
}

/*DS_read_byte*/
unsigned char read_byte(void)
{
unsigned char i;
unsigned char value=0;
for(i=0;i<8;i++)
 {
 if(read_bit())value|=0x01<<i;// reads byte in, one byte at a time
        // and then shifts it left
 Delay_10us(); // wait for rest of timeslot
 DDR_DS=1;//set io output
 PDR_DS=1;//pull DQ low to start timeslot
 }
return(value);
}

/*DS_write_byte*/
void write_byte(char val)
{
unsigned char i;
unsigned char temp;
for(i=0;i<8;i++)// writes byte, one bit at a time
 {
 temp=val>>i;// shifts val right ‘i’ spaces
 temp &=0x01;// copy that bit to temp
 write_bit(temp);// write bit in temp into
 }
Delay_10us();
}

/*DS_count*/
unsigned char ds_count(void)
{
unsigned char temp;
sign=0;
if((read_data_H & 0xf8)!=0x00)//负数处理,取补码
 {
 sign=1;
 read_data_H=~read_data_H;
 read_data_L=~read_data_L;
 temp=read_data_L+1;
 read_data_L=temp;
 if(temp>255)
    {read_data_H++;}
 }
read_data_H=read_data_H<<4;//整数部分处理,左移去掉高位数据
read_data_H=read_data_H & 0x70;//去掉高位和低位数据
data_int=read_data_L;
data_int=data_int>>4;//右移4位去掉小数部分的数据
data_int=data_int & 0x0f;//去掉高位数据
read_data_H=read_data_H | data_int;//完整的整数部分数据
data_int=read_data_H;//数据赋值给缓存
//disp_int=(unsigned int)data_int;

disp_int=(data_int & 0x01)*1;
disp_int+=(data_int & 0x02)*2;
disp_int+=(data_int & 0x04)*4;
disp_int+=(data_int & 0x08)*8;
disp_int+=(data_int & 0x10)*16;
disp_int+=(data_int & 0x20)*32;
disp_int+=(data_int & 0x40)*64;
disp_int+=(data_int & 0x80)*128;


disp_int1=disp_int%10;//个位
disp_int2=(disp_int%100)/10;//十位
disp_int3=disp_int/100;//百位
data_dec=read_data_L & 0x0f;//小数部分处理
data_dec=data_dec<<1;
disp_dec=(unsigned int)data_dec;
disp_dec1=disp_dec%10;//小数低位
disp_dec2=disp_dec/10;//小数高位
}

/*bin_to_dec*/
void bin_to_dec(unsigned char i)
{
unsigned char m;
m=(i&0x01)*1;
m+=(i&0x02)*2;
m+=(i&0x04)*4;
m+=(i&0x08)*8;
m+=(i&0x10)*16;
m+=(i&0x20)*32;
m+=(i&0x40)*64;
m+=(i&0x80)*128;
disp_int=m;
}
/*DS_disp*/
void disp_ds(void)
{
DDR0=0xff;//io output
PDR0=0xff;
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
disp_code(disp_int2);
//PDR0=dsip_data;
PDR0=read_data_H;
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
disp_code(disp_int1);
//PDR0=dsip_data;
PDR0=read_data_L;
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
Delay_250ms();
}

void main (void)
{
while(1)
 {
 DS_rest();//rest ds18b20
 write_byte(0xcc);//command skip ROM
 write_byte(0x44);//command convert T
 Delay_250ms();//wait convert t ok
 Delay_250ms();//500ms
 DS_rest();//rest ds18b20
 write_byte(0xcc);//command skip ROM
 write_byte(0xbe);//command read
 read_data_L=~read_byte();//read L_data
 read_data_H=~read_byte();//read H_data
 
// ds_count();//t count
 disp_ds();//disp t
 }
}

贴出来大家看看  有兴趣的高手 希望能指点一下哪里错了
数据不显示
还在测试过程中 会有点乱


助工
2010-12-29 08:18:17     打赏
10楼

谢谢高手出场
我改改看 不过就是因为怕延时不准确 所以才把延时程序单独分开的
我也还在看时序呢
单总线的 写时间间隙、时序都很严格的样子。


共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]