逍遥派掌门 发表于 2015-11-2 00:46

//处理接收到的数据
Procedure Do_receive;
var
   number   : byte;
   checksum : byte;
begin
if (RX_right = True) then
begin
    if ((RX_Buffer = Header) and (RX_Buffer = Address)) then                  {判断是否合法}
    begin
      checksum := 0;
      for number := 1 to (RX_Length-1) do checksum:= checksum + RX_buffer;   {计算校验和}
      if (checksum = RX_buffer) then                                    {校验通过}
      begin
      caseRX_buffer of   {判断命令}
          $01:                  
            begin
                LED_green := False;   {亮绿色LED}
                LED_blue:= True;      {灭蓝色LED}
            end;
          $02:
            begin
                LED_green := True;   {灭绿色LED}
                LED_blue:= False;    {亮蓝色LED}
            end;
          $03:
            begin
                LED_green := False;   {亮绿色LED}
                LED_blue:= False;   {亮蓝色LED}
            end;
          $00:
            begin
                LED_green := True;   {灭绿色LED}
                LED_blue:= True;   {灭蓝色LED}
            end;      
      end;
      TX_Buffer := RX_buffer;
      TX_Need := True;                           {发送应答}
      TX_Buffer := (not Port_Get) and Port_Mask;    { 获取LED控制脚的状态}
      end;         
    end;

    RX_Count := 1;         
    RX_right := False;         
end;
end;

大道至简 发表于 2015-11-3 10:59

逍遥派掌门“:
没有收入,研发还能保持持续的兴趣的耐力,是小概率事件

逍遥派掌门 发表于 2015-11-3 16:40



既然大道至简版主对Turbo51的研发和收入感兴趣,那就多聊几句吧。

1、Turbo51的作者不是天朝人,所以,事情可能和版主的意识有出入。

2、作者是在工作中感觉有自己做Turbo51的需求,所以动手做了。他并没有交代是否全职搞Turbo51,纯业余搞也是可能的,这样的话,他无须担忧衣食。

3、作者的持续兴趣还真是挺令人佩服的,从2000年开始做,到2013年仍更新版本。这种持续,版主认为如何?

4、在我开了这个帖子的时候,就有人说既有优秀的C编译器了,根本不需要玩具的Turbo51。对于这个问题,在作者的网站里已经明确说了,现贴出来:

  Since there many excellent C compilers for 8051 you might ask why Pascal ?    I just like it.


5、从作者的网站来看,他似乎真的不是很在乎赢利,原因一是软件是免费使用的,原因二,他说了一句话:

  I am very happy to see that Pascal programming language is still alive and has many users.


   那是一种情结,以及心灵的享受,超脱于金钱的世俗。

6、当然,作者也不拒绝善意的收入,甚至提供了捐赠的帐号。相信他并不能从中发财。

基于个人兴趣爱好的事情,完全可能持续长久,相信每个人都有那么一点。

大道至简 发表于 2015-11-4 10:30

好吧,这种大侠是要敬佩的

hdwgt 发表于 2015-11-5 18:33

确实不错。可惜停止更新了!

逍遥派掌门 发表于 2015-11-6 09:24

//待发送数据的预处理
Procedure Do_send;
var
   number: byte;
   checksum: byte;
begin
if(TX_Need = True) then
begin
    checksum := 0;
    for number := 1 to (TX_Length -1) do checksum := checksum + TX_Buffer;    {计算校验和}
    TX_Buffer := checksum;
    TX_Count := 1;
    TX_right := False;
    TX_Need:= False ;   
    TI       := True;                      {开启发送}
end;
end;   

逍遥派掌门 发表于 2015-11-6 09:24

//主循环
begin
Init;          {初始化单片机,此处略}

Repeat
    Do_receive;
    Do_send;
until False;
end.
单片机部分就此完成。

ddllxxrr 发表于 2015-11-6 09:45

大家都用Keil C51,就可以完成任务,不想再用别的因为工作还有别的事要处理,不过谢谢楼主的分享

逍遥派掌门 发表于 2015-11-13 00:09

本帖最后由 逍遥派掌门 于 2015-11-13 00:12 编辑

(九) 计算机端串行通信的Lazarus代码   

       前面的单片机代码已经完成,该到计算机端的软件登场了。

       在计算机端依然选用pascal语言的编程软件,这样两端的编程语言都统一了,语法上完全兼容,实现无缝接轨。

       本节使用的编程软件是:Lazarus 。 一款开源的、跨平台的pascal语言编程软件,是Delphi 7.0的浴火重生。有兴趣者,可访问Lazarus的中文社区:www.fpccn.com 。
      
       可用于Lazarus的串行通信控件有不少,各有特点,在本节里,选用的控件是从Delphi移植过来的SPCOMM控件。

       控件的设置如下:


   从图中可以看到,该控件和Delphi 7.0 里的控件是完全一样的。


逍遥派掌门 发表于 2015-11-26 23:21

为了和前一节的单片机电路对应,设置如下界面:

上面一行的LED是需要的状态,由操作者来改变;
下面一行的LED用于反映单片机的实际状态,根据接收的数据来控制。

逍遥派掌门 发表于 2015-11-26 23:25

本帖最后由 逍遥派掌门 于 2015-11-26 23:34 编辑

定义常量:const
   Header             = $7E;            // 起始字
   Address            = $01;         // 单片机地址

定义变量:
var
green_light,blue_light:boolean;
send_data:array of byte;                      // 发送缓冲区,这里和通信协议对应
receive_data:array of byte;                           // 接收缓冲区,这里定义为可变数组,通用性比较好

上一行绿色LED的代码:
green_light := not green_light;         // 改变绿色LED的亮灭

上一行蓝色LED的代码:
blue_light := not blue_light;            // 改变蓝 色LED的亮灭

发送的控制代码:
send_data:= Header;
send_data:= Address;
send_data := $00;                                          // 暂时借用,省掉一个变量而已
if (green_light = true ) then send_data := send_data + $01;      // 绿色LED的状态
if (blue_light = true )then send_data := send_data + $02;       // 蓝色LED的状态
send_data := send_data + send_data + send_data;         // 计算校验和
Comm1.WriteCommData(@send_data,4);                                       // 发送4个字节到串口

逍遥派掌门 发表于 2015-11-29 11:41

关键的接收代码(双击SPCOMM控件的ReceiveData事件):
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
   checksum:byte;
   number:byte;
begin
setlength(receive_data,BufferLength);                               // 根据接收的长度,设置数组大小
receive_data := Buffer;                                                   //取得数据
checksum := 0;
for number:=0 to (bufferlength -2) do checksum:=checksum + receive_data;    // 计算校验和
if (checksum = receive_data) then                                                            // 校验和合法,则进行接收后的处理
begin
    case receive_data of
   $00:
         begin
         BitBtn3.Glyph.LoadFromFile(green_dark_file);                      // 下一行的绿色LED 灭
         BitBtn4.Glyph.LoadFromFile(blue_dark_file);                        // 下一行的蓝色LED 灭
         end;
   $01:
         begin
         BitBtn3.Glyph.LoadFromFile(green_light_file);                     // 下一行的绿色LED亮
         BitBtn4.Glyph.LoadFromFile(blue_dark_file);                     // 下一行的蓝色LED 灭
         end;
   $02:
         begin
         BitBtn3.Glyph.LoadFromFile(green_dark_file);                   // 下一行的绿色LED 灭
         BitBtn4.Glyph.LoadFromFile(blue_light_file);                      // 下一行的蓝色LED 亮
         end;
   $03:
         begin
         BitBtn3.Glyph.LoadFromFile(green_light_file);                  // 下一行的绿色LED亮
         BitBtn4.Glyph.LoadFromFile(blue_light_file);                     // 下一行的蓝色LED 亮
         end;
    end;
end;
setlength(receive_data,0);                                                      // 释放资源
end;这里接收后的处理仅是作为例证。


绿色LED 灭,蓝色LED 灭



绿色LED亮,蓝色LED 灭


绿色LED 灭,蓝色LED 亮



绿色LED亮,蓝色LED 亮



到此,串行通信的Lazarus代码解析完毕。

supertankhzt 发表于 2016-6-30 16:51

只能说**下去精神可嘉,然而事实上走偏门路线就是比大路要坎坷,好比黑猫抓到老鼠只需3步,而白猫要追三条街,都是好猫,我选择黑猫

逍遥派掌门 发表于 2016-7-6 16:01

supertankhzt 发表于 2016-6-30 16:51
只能说**下去精神可嘉,然而事实上走偏门路线就是比大路要坎坷,好比黑猫抓到老鼠只需3步,而白猫要追三 ...

你说偏门,不过是你见识少,接触少而已。世界不是井口那么大。

lihuasoft 发表于 2017-2-5 08:00

见到这个贴子,激动~求楼主联系方式(有QQ吗),谢谢!

大道至简 发表于 2017-2-5 19:46

supertankhzt 发表于 2015-9-24 07:05
本人以前也是这样比较偏执,而现在认为钻这些墙缝还不如转语言走大门,更容易搜索资料获得帮助。 ...

附议

大道至简 发表于 2017-2-5 19:47

c语言要一统江湖了,楼主,认清趋势,回头是岸啊。。。。。

咪木 发表于 2017-2-6 16:38

作为一名学生,很是佩服您。

逍遥派掌门 发表于 2017-3-16 17:48

大道至简 发表于 2017-2-5 19:47
c语言要一统江湖了,楼主,认清趋势,回头是岸啊。。。。。

当对某个产品已经很熟悉的时候,用什么语言已经不重要了。
对产品的控制、编程的思路已经透彻了,用什么语言编程都能实现目的。
另外也看个人的喜好,走自己的路,不一定要大路货,别人的路,可能自己走不通。

逍遥派掌门 发表于 2017-3-16 17:53

lihuasoft 发表于 2017-2-5 08:00
见到这个贴子,激动~求楼主联系方式(有QQ吗),谢谢!

有什么感触呢?
可以直接 “发消息”

页: 1 [2] 3
查看完整版本: 51单片机的Pascal语言编程