打印
[国产单片机]

打算为海尔HR6Pxx系列芯片做个C编译,但是...

[复制链接]
3528|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
su_mj000|  楼主 | 2009-3-12 02:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
打算为海尔HR6Pxx系列芯片做个C编译,算是支持国产货。但是手头有关的资料
实在太简单、含糊不清。比如:

指令“ADD A,F”的编码是:s1 1010 11 frrr rrrr
此处的's'不知何解?

又如,指令"MOVAB"到底是怎么回事?难道还有个累加器B,像51系列那样?

还有,指令“MUL”是乘法指令吗?如果有的话,那就非同小可,应该出现在资料首页的
简介中。

最要紧的是,各状态位的运行条件或过程没有说明。这对减法指令非常重要!

那位有更详细的资料,能上传吗?

相关下载

相关帖子

沙发
dragon_hn| | 2009-3-12 08:26 | 只看该作者

^_^

首先要找原厂拉点赞助,其次找原厂要资料,再不行就用仿真器仿.

使用特权

评论回复
板凳
McuPlayer| | 2009-3-12 14:34 | 只看该作者

楼主可站内PM我,我帮你联系下海尔官方

使用特权

评论回复
地板
gtw| | 2009-3-12 20:48 | 只看该作者

海尔网站上说即将推出C编译器了

使用特权

评论回复
5
gtw| | 2009-3-12 20:49 | 只看该作者

不过,多一种总比少的好

使用特权

评论回复
6
gtw| | 2009-3-12 21:05 | 只看该作者

https://bbs.21ic.com/club/bbs/bbsView.asp?boardid=11

使用特权

评论回复
7
su_mj000|  楼主 | 2009-3-13 02:01 | 只看该作者

已经有了雏形,其实大部分东西已经有了。

这是C源程序:
#include <hr6p77.h>

typedef struct {
    char a;
    int  b;
    long c;
} s1;


typedef union {
    char buf[10];
    s1   st;
} n_t;


n_t data;

void func ()
{
    if ( data.buf[2] == 2 )
    data.st.b = 10;
    long n = data.st;
    PA = PB ^ PC;
}


#pragma int_save 2
interrupt (0x0d)
{
    PA = PB & PC;
}

这是汇编输出:
;**************************************************************** 
;  HR6P C Compiler (HR6CC), v0.01 
;  Thu Mar 12 10:55:31 2009
;**************************************************************** 
    .device hr6p77, 8192
    .dbank  0x10102020, 0x6F6F6F7F
    
    .segment BANK0 (REL)
data::           .rs     10
    
    
    .segment CODE2 (REL), func:0x4
func_1_n .equ    func_$data$ + 0
; ::: 'e1.c' #18: void func () 
func:: 
; ::: 'e1.c' #20: if ( data.buf[2] == 2 ) 
    movi    2
    clr     STATUS
    xor     data+2
    jbs     STATUS, 2
    goto    L3
; ::: 'e1.c' #21: data.st.b = 10; 
    movi    10
    mova    data+1
    clr     data+2
L3: 
; ::: 'e1.c' #22: long n = data.st; 
    clr     STATUS
    mov     data
    mova    func_1_n
    mov     data+1
    mova    func_1_n+1
    mov     data+2
    mova    func_1_n+2
    mov     data+3
    mova    func_1_n+3
; ::: 'e1.c' #23: PA = PB ^ PC; 
    mov     6
    xor     7
    mova    5
    ret
    
    
    .segment CODE0 (ABS, =13)
    mova    _$$
    swap    STATUS
    mova    _$$-1
    mov     PCLATH
    clr     PCLATH
    goto    interrupt_13
    
    .segment CODE1 (REL), interrupt_13:0x4
interrupt_13: 
    clr     STATUS
    mova    interrupt_13_$data$+0
    mov     FSR
    mova    interrupt_13_$data$+1
    mov     _$acc0$
    mova    interrupt_13_$data$+2
    mov     _$acc1$
    mova    interrupt_13_$data$+3
    
; ::: 'e1.c' #30: PA = PB & PC; 
    mov     6
    and     7
    mova    5
    mov     interrupt_13_$data$+3
    mova    _$acc1$
    mov     interrupt_13_$data$+2
    mova    _$acc0$
    mov     interrupt_13_$data$+1
    mova    FSR
    mov     interrupt_13_$data$+0
    mova    PCLATH
    swap    _$$-1
    mova    STATUS
    swap    _$$, F
    swap    _$$
    retie
    
    
    .end

使用特权

评论回复
8
McuPlayer| | 2009-3-13 14:18 | 只看该作者

希望有机会跟楼主交流LCC

使用特权

评论回复
9
gtw| | 2009-3-13 20:12 | 只看该作者

lz有没有个人网站?

使用特权

评论回复
10
su_mj000|  楼主 | 2009-3-14 02:52 | 只看该作者

有个人网站

9楼:这里就不公开了,都是些小玩意,怕露怯!

8楼:LCC和PM是什么?我孤陋寡闻,不好意思。

使用特权

评论回复
11
McuPlayer| | 2009-3-14 10:22 | 只看该作者

呵呵

使用特权

评论回复
12
gtw| | 2009-3-14 13:00 | 只看该作者

lz谦虚了,呵呵

使用特权

评论回复
13
su_mj000|  楼主 | 2009-3-14 20:58 | 只看该作者

研究了一下HR6P的指令系统,...

研究了一下HR6P的指令系统,猜想:(1)‘s’位大概是防盗融丝(secure fuse);
(2)‘MUL’应该是乘法指令;(3)‘MOVAB’是将乘法结果的高字节送累加器。

总之,HR6P系列的指令要比PIC16强很多。其中的长调用‘LCALL’是全程调用,调用子程序和读取ROM时操作会快一点。

看来HR6P与Enhanced PIC16Fxxxx有的一拚。

使用特权

评论回复
14
McuPlayer| | 2009-3-17 18:25 | 只看该作者

好贴就应该穿裤子

使用特权

评论回复
15
gtw| | 2009-3-17 21:55 | 只看该作者

支持

使用特权

评论回复
16
su_mj000|  楼主 | 2009-3-18 10:08 | 只看该作者

方便的话,...

坛主McuPlayer:如方便的话,能否上传一份详细一点资料?

我怀疑海尔为了避免或躲避microchip的版权官司,一直没有公开详细的datasheet。

使用特权

评论回复
17
McuPlayer| | 2009-3-18 10:27 | 只看该作者

我手上没有海尔的不公开资料

也跟你一样,是从公开途径获得的。

只是跟他们那边的人熟悉一些而已,并且目前仅仅是个人关系

使用特权

评论回复
18
gtw| | 2009-3-24 18:15 | 只看该作者

不知su_mj000兄进展如何了?

使用特权

评论回复
19
su_mj000|  楼主 | 2009-3-26 01:25 | 只看该作者

最近糟心事太多,影响太大。

最近糟心事太多,影响太甚,所以进展不大。汇编器(assembler)有了最出版,下面是汇编后的结果。估计STATUS寄存器与MICROCHIP的定义有差异,但没有资料对照,暂且照抄吧。

                         00001    ;**************************************************************** 
                         00002    ;  HR6P C Compiler (HR6CC), v0.01 
                         00003    ;  Sat Mar 14 08:32:08 2009
                         00004    ;**************************************************************** 
                         00005        .device hr6p77, 8192
                         00006        .dgroup 0, 0x10102020, 0x6F6F6F7F
                         00007        
                         00008        .segment BANK0 (REL)
0000:  (A)               00009    data::           .rs     10
                         00010        
                         00011        
                         00012        .segment CODE2 (REL), func:0x4
                         00013    func_1_n .equ    func_$data$ + 0
                         00014    ; ::: 'e1.c' #18: void func () 
0000:                    00015    func:: 
                         00016    ; ::: 'e1.c' #20: if ( data.buf[2] == 2 ) 
0000:  5C02              00017        movi    2
0001:  6D83              00018        clr     STATUS
0002: r6A00              00019        xor     data+2
0003:  4103              00020        jbs     STATUS, 2
0004: r1000              00021        goto    L3
                         00022    ; ::: 'e1.c' #21: data.st.b = 10; 
0005:  5C0A              00023        movi    10
0006: r6C80              00024        mova    data+1
0007: r6D80              00025        clr     data+2
0008:                    00026    L3: 
                         00027    ; ::: 'e1.c' #22: long n = data.st; 
0008:  6D83              00028        clr     STATUS
0009: r6400              00029        mov     data
000A: r6C80              00030        mova    func_1_n
000B: r6400              00031        mov     data+1
000C: r6C80              00032        mova    func_1_n+1
000D: r6400              00033        mov     data+2
000E: r6C80              00034        mova    func_1_n+2
000F: r6400              00035        mov     data+3
0010: r6C80              00036        mova    func_1_n+3
                         00037    ; ::: 'e1.c' #23: PA = PB ^ PC; 
0011:  6406              00038        mov     6
0012:  6A07              00039        xor     7
0013:  6C85              00040        mova    5
0014:  6C08              00041        ret
                         00042        
                         00043        
                         00044        .segment CODE0 (ABS, =13)
000D: r6C80              00045        mova    _$$
000E:  6203              00046        swap    STATUS
000F: r6C80              00047        mova    _$$-1
0010:  640A              00048        mov     PCLATH
0011:  6D8A              00049        clr     PCLATH
0012: r1000              00050        goto    interrupt_13
                         00051        
                         00052        .segment CODE1 (REL), interrupt_13:0x4
0000:                    00053    interrupt_13: 
0000:  6D83              00054        clr     STATUS
0001: r6C80              00055        mova    interrupt_13_$data$+0
0002:  6404              00056        mov     FSR
0003: r6C80              00057        mova    interrupt_13_$data$+1
0004: r6400              00058        mov     _$acc0$
0005: r6C80              00059        mova    interrupt_13_$data$+2
0006: r6400              00060        mov     _$acc1$
0007: r6C80              00061        mova    interrupt_13_$data$+3
                         00062        
                         00063    ; ::: 'e1.c' #30: PA = PB & PC; 
0008:  6406              00064        mov     6
0009:  6907              00065        and     7
000A:  6C85              00066        mova    5
000B: r6400              00067        mov     interrupt_13_$data$+3
000C: r6C80              00068        mova    _$acc1$
000D: r6400              00069        mov     interrupt_13_$data$+2
000E: r6C80              00070        mova    _$acc0$
000F: r6400              00071        mov     interrupt_13_$data$+1
0010:  6C84              00072        mova    FSR
0011: r6400              00073        mov     interrupt_13_$data$+0
0012:  6C8A              00074        mova    PCLATH
0013: r6200              00075        swap    _$$-1
0014:  6C83              00076        mova    STATUS
0015: r6280              00077        swap    _$$, F
0016: r6200              00078        swap    _$$
0017:  6C09              00079        retie
                         00080        
                         00081        
                         00082        .end

使用特权

评论回复
20
yewuyi| | 2009-4-7 09:45 | 只看该作者

我帮你证实一下

那个S确实是安全位。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

286

帖子

1

粉丝