⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atmega16l_uart.s

📁 电梯楼层采集器代码
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module ATmega16L_Uart.C
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\ATmega16L_Uart.C
	.area lit(rom, con, rel)
_TableOfCRC16::
	.word 0
	.word 4129
	.word 8258
	.word 12387
	.word 16516
	.word 20645
	.word 24774
	.word 28903
	.word 33032
	.word 37161
	.word 41290
	.word 45419
	.word 49548
	.word 53677
	.word 57806
	.word 61935
	.word 4657
	.word 528
	.word 12915
	.word 8786
	.word 21173
	.word 17044
	.word 29431
	.word 25302
	.word 37689
	.word 33560
	.word 45947
	.word 41818
	.word 54205
	.word 50076
	.word 62463
	.word 58334
	.word 9314
	.word 13379
	.word 1056
	.word 5121
	.word 25830
	.word 29895
	.word 17572
	.word 21637
	.word 42346
	.word 46411
	.word 34088
	.word 38153
	.word 58862
	.word 62927
	.word 50604
	.word 54669
	.word 13907
	.word 9842
	.word 5649
	.word 1584
	.word 30423
	.word 26358
	.word 22165
	.word 18100
	.word 46939
	.word 42874
	.word 38681
	.word 34616
	.word 63455
	.word 59390
	.word 55197
	.word 51132
	.word 18628
	.word 22757
	.word 26758
	.word 30887
	.word 2112
	.word 6241
	.word 10242
	.word 14371
	.word 51660
	.word 55789
	.word 59790
	.word 63919
	.word 35144
	.word 39273
	.word 43274
	.word 47403
	.word 23285
	.word 19156
	.word 31415
	.word 27286
	.word 6769
	.word 2640
	.word 14899
	.word 10770
	.word 56317
	.word 52188
	.word 64447
	.word 60318
	.word 39801
	.word 35672
	.word 47931
	.word 43802
	.word 27814
	.word 31879
	.word 19684
	.word 23749
	.word 11298
	.word 15363
	.word 3168
	.word 7233
	.word 60846
	.word 64911
	.word 52716
	.word 56781
	.word 44330
	.word 48395
	.word 36200
	.word 40265
	.word 32407
	.word 28342
	.word 24277
	.word 20212
	.word 15891
	.word 11826
	.word 7761
	.word 3696
	.word 65439
	.word 61374
	.word 57309
	.word 53244
	.word 48923
	.word 44858
	.word 40793
	.word 36728
	.word 37256
	.word 33193
	.word 45514
	.word 41451
	.word 53516
	.word 49453
	.word 61774
	.word 57711
	.word 4224
	.word 161
	.word 12482
	.word 8419
	.word 20484
	.word 16421
	.word 28742
	.word 24679
	.word 33721
	.word 37784
	.word 41979
	.word 46042
	.word 49981
	.word 54044
	.word 58239
	.word 62302
	.word 689
	.word 4752
	.word 8947
	.word 13010
	.word 16949
	.word 21012
	.word 25207
	.word 29270
	.word 46570
	.word 42443
	.word 38312
	.word 34185
	.word 62830
	.word 58703
	.word 54572
	.word 50445
	.word 13538
	.word 9411
	.word 5280
	.word 1153
	.word 29798
	.word 25671
	.word 21540
	.word 17413
	.word 42971
	.word 47098
	.word 34713
	.word 38840
	.word 59231
	.word 63358
	.word 50973
	.word 55100
	.word 9939
	.word 14066
	.word 1681
	.word 5808
	.word 26199
	.word 30326
	.word 17941
	.word 22068
	.word 55628
	.word 51565
	.word 63758
	.word 59695
	.word 39368
	.word 35305
	.word 47498
	.word 43435
	.word 22596
	.word 18533
	.word 30726
	.word 26663
	.word 6336
	.word 2273
	.word 14466
	.word 10403
	.word 52093
	.word 56156
	.word 60223
	.word 64286
	.word 35833
	.word 39896
	.word 43963
	.word 48026
	.word 19061
	.word 23124
	.word 27191
	.word 31254
	.word 2801
	.word 6864
	.word 10931
	.word 14994
	.word 64814
	.word 60687
	.word 56684
	.word 52557
	.word 48554
	.word 44427
	.word 40424
	.word 36297
	.word 31782
	.word 27655
	.word 23652
	.word 19525
	.word 15522
	.word 11395
	.word 7392
	.word 3265
	.word 61215
	.word 65342
	.word 53085
	.word 57212
	.word 44955
	.word 49082
	.word 36825
	.word 40952
	.word 28183
	.word 32310
	.word 20053
	.word 24180
	.word 11923
	.word 16050
	.word 3793
	.word 7920
	.dbsym e TableOfCRC16 _TableOfCRC16 A[512:256]ki
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\ATmega16L_Uart.C
	.dbfunc e CRC16 _CRC16 fV
;            tmp -> R10,R11
;            chr -> R18
;            crc -> R16,R17
	.even
_CRC16::
	st -y,R10
	st -y,R11
	.dbline -1
	.dbline 290
; 
; #include"include.h"
; /*
;  M16熔丝位  
; 
; ATmega16的熔丝设置详解
; 
; 初学者对熔丝经常不解,AVR芯片使用熔丝来设定时钟、启动时间、一些功能的使能、BOOT区设定、当然还有最让初学者头疼的保密位,设不好锁了芯片很麻烦。要想使MCU功耗最小也要了解一些位的设定
; 
; 在此写下自己对熔丝的理解,参照了一些MEGA16的PDF文档,双龙的文档,以及大家的帖子。力求易懂、全面。
; 
; 下面以双龙的在系统编程软件SLISP为例具体说明我对熔丝的理解。
; 
; a intro
; 
; b 低位(时钟及启动时间设置):
; 
; c 时钟总表
; 
; d 高位(BOOT区设置):
; 
; e 常用熔丝设置
; 
;  打开运行SLISP.exe,首先记住:
; 
; 1:未编程(配置熔丝检查框未打钩) 
; 
; 0:编程 (配置熔丝检查框打钩)
; 
; 建议在配置熔丝之前先“读取配置”读出原来的设定,再自己编辑。
; 
; 先了解一下M16的出厂设置。
; 
; 默认设置为:内部RC振荡8MHz 6 CK + 65 ms CKSEL="0100" SUT="10"低位(时钟及启动时间设置):
; 
; 1.BOD(Brown-out Detection) 掉电检测电路
; 
; BODLEVEL(BOD电平选择): 1: 2.7V电平; 0:4.0V电平
; 
; BODEN(BOD功能控制): 1:BOD功能禁止;0:BOD功能允许 
; 
; 使用方法:如果BODEN使能(复选框选中)启动掉电检测,则检测电平由BODLEVEL决定。一旦VCC下降到触发电平(2.7v或4.0v)以下,MCU复位;当VCC电平大于触发电平后,经过tTOUT 延时周后重新开始工作。
; 
; 注:1.复选框选中代表0,0电平有效。             
; 
;    2.因为M16L可以工作在2.7v~5.5v,所以触发电平可选2.7v(BODLEVEL=0)或4.0v(BODLEVEL=1);而M16工作在4.5~5.5V,所以只能选BODLEVEL=0,BODLEVEL=1不适用于ATmega16。
; 
; 2.复位启动时间选择
; 
; SUT 1/0:  当选择不同晶振时,SUT有所不同。
; 
; 如果没有特殊要求推荐SUT 1/0设置复位启动时间稍长,使电源缓慢上升。
; 
; CKSEL3/0: 时钟源选择(时钟总表)
; 
;  
; 
; 时钟总表  
; 
;   时钟源               启动延时         熔丝
; 
;   外部时钟             6 CK + 0 ms               CKSEL=0000 SUT="00"
; 
;   外部时钟             6 CK + 4.1 ms             CKSEL=0000 SUT="01"
; 
;   外部时钟             6 CK + 65 ms              CKSEL="0000" SUT="10"
; 
; 内部RC振荡1MHZ                    6 CK + 0 ms    CKSEL="0001" SUT="00"
; 
; 内部RC振荡1MHZ                     6 CK + 4.1 ms CKSEL="0001" SUT="01"
; 
; 内部RC振荡1MHZ1                    6 CK + 65 ms  CKSEL="0001" SUT="10"
; 
; 内部RC振荡2MHZ                     6 CK + 0 ms   CKSEL="0010" SUT="00"
; 
; 内部RC振荡2MHZ                     6 CK + 4.1 ms CKSEL="0010" SUT="01"
; 
; 内部RC振荡2MHZ                     6 CK + 65 ms  CKSEL="0010" SUT="10"
; 
; 内部RC振荡4MHZ                     6 CK + 0 ms   CKSEL="0011" SUT="00"
; 
; 内部RC振荡4MHZ                     6 CK + 4.1 ms CKSEL="0011" SUT="01"
; 
; 内部RC振荡4MHZ                     6 CK + 65 ms  CKSEL="0011" SUT="10"
; 
; 内部RC振荡8MHZ                     6 CK + 0 ms   CKSEL="0100" SUT="00"
; 
; 内部RC振荡8MHZ                     6 CK + 4.1 ms CKSEL="0100" SUT="01"
; 
; 内部RC振荡8MHZ                     6 CK + 65 ms      CKSEL=0100 SUT="10"
; 
; 外部RC振荡≤0.9MHZ                 18 CK + 0 ms      CKSEL="0101" SUT="00"
; 
; 外部RC振荡≤0.9MHZ                 18 CK + 4.1 ms    CKSEL="0101" SUT="01"
; 
; 外部RC振荡≤0.9MHZ                 18 CK + 65 ms     CKSEL="0101" SUT="10"
; 
; 外部RC振荡≤0.9MHZ                 6 CK + 4.1 ms     CKSEL="0101" SUT="11"
; 
; 外部RC振荡0.9-3.0MHZ               18 CK + 0 ms      CKSEL="0110" SUT="00"
; 
; 外部RC振荡0.9-3.0MHZ               18 CK + 4.1 ms    CKSEL="0110" SUT="01"
; 
; 外部RC振荡0.9-3.0MHZ               18 CK + 65 ms     CKSEL="0110" SUT="10"
; 
; 外部RC振荡0.9-3.0MHZ               6 CK + 4.1 ms     CKSEL=0110 SUT="11"
; 
; 外部RC振荡3.0-8.0MHZ               18 CK + 0 ms      CKSEL=0111 SUT="00"
; 
; 外部RC振荡3.0-8.0MHZ               18 CK + 4.1 ms    CKSEL="0111" SUT="01"
; 
; 外部RC振荡3.0-8.0MHZ               18 CK + 65 ms     CKSEL=0111 SUT="10"
; 
; 外部RC振荡3.0-8.0MHZ               6 CK + 4.1 ms     CKSEL="0111" SUT="11"
; 
; 外部RC振荡8.0-12.0MHZ              18 CK + 0 ms      CKSEL=1000 SUT="00"
; 
; 外部RC振荡8.0-12.0MHZ              18 CK + 4.1 ms    CKSEL="1000" SUT="01"
; 
; 外部RC振荡8.0-12.0MHZ              18 CK + 65 ms     CKSEL="1000" SUT="10"
; 
; 外部RC振荡8.0-12.0MHZ              6 CK + 4.1 ms     CKSEL="1000" SUT="11"
; 
;    低频晶振(32.768KHZ)                1K CK + 4.1 ms    CKSEL="1001" SUT="00"
; 
;    低频晶振(32.768KHZ)                1K CK + 65 ms     CKSEL="1001" SUT="01"
; 
;    低频晶振(32.768KHZ)                32K CK + 65 ms    CKSEL="1001" SUT="10"
; 
; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    258 CK + 4.1 ms   CKSEL="1010" SUT="00"
; 
; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    258 CK + 65 ms    CKSEL="1010" SUT="01"
; 
; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    1K CK + 0 ms      CKSEL=1010 SUT="10"
; 
; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    1K CK + 4.1 ms    CKSEL="1010" SUT="11"
; 
; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    1K CK + 65 ms     CKSEL="1011" SUT="00"
; 
; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    16K CK + 0 ms     CKSEL=1011 SUT="01"
; 
; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    16K CK + 4.1ms    CKSEL="1011" SUT="10"
; 
; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    16K CK + 65ms     CKSEL="1011" SUT="11"
; 
; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    258 CK + 4.1 ms   CKSEL="1100" SUT="00"
; 
; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    258 CK + 65 ms    CKSEL="1100" SUT="01"
; 
; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    1K CK + 0 ms      CKSEL=1100 SUT="10"
; 
; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    1K CK + 4.1 ms    CKSEL="1100" SUT="11"
; 
; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    1K CK + 65 ms     CKSEL="1101" SUT="00"
; 
; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    16K CK + 0 ms     CKSEL="1101" SUT="01"
; 
; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    16K CK + 4.1ms    CKSEL="1101" SUT="10"
; 
; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    16K CK + 65ms     CKSEL="1101" SUT="11"
; 
; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    258 CK + 4.1 ms   CKSEL="111"0 SUT="00"
; 
; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    258 CK + 65 ms    CKSEL="111"0 SUT="01"
; 
; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    1K CK + 0 ms      CKSEL="111"0 SUT="10"
; 
; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    1K CK + 4.1 ms    CKSEL="111"0 SUT="11"
; 
; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    1K CK + 65 ms     CKSEL=1111 SUT="00"
; 
; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    16K CK + 0 ms     CKSEL="111"1 SUT="01"
; 
; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    16K CK + 4.1ms    CKSEL="111"1 SUT="10"
; 
; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    16K CK + 65ms     CKSEL="111"1 SUT="11"
; 
;  
; 
; 高位(BOOT区设置):
; 
; 1. JTAGEN(JTAG允许):  1:JTAG禁止; 0:JTAG允许 
; 
;    OCDEN(OCD功能允许):  1:OCD功能禁止;0:OCD功能允许 
; 
;    OCDEN(On-chip Debug):片上调试使能位
; 
;    JTAGEN(JTAG使能): JTAG测试访问端口
; 
; 使用方法:在JTAG调试时,使能OCDEN JTAGEN两位(复选框打勾),并保持所有的锁定位处于非锁定状态;在实际使用时为降低功耗,不使能OCDEN JTAGEN,大约减少2-3mA的电流。
; 
; 2. SPIEN(SPI下载允许):  1:SPI下载禁止;0:SPI下载使能
; 
; 注:在双龙的软件里,SPIEN是不能编辑的,默认为0。
; 
; 3. CKOPT(选择放大器模式): CKOPT=0:高幅度振荡输出;CKOPT=1:低幅度振荡输出 
; 
;    当CKOPT 被编程时振荡器在输出引脚产生满幅度的振荡。这种模式适合于噪声环境,以及需要通过XTAL2 驱动第二个时钟缓冲器的情况,而且这种模式的频率范围比较宽。当保持CKOPT 为未编程状态时,振荡器的输出信号幅度比较小。
; 
;    其优点是大大降低了功耗,但是频率范围比较窄,而且不能驱动其他时钟缓冲器。(据我测量功耗差别在1mA左右)。
; 
;    对于谐振器,当CKOPT未编程时的最大频率为8 MHz,CKOPT编程时为16 MHz。内部RC振荡器工作时不对CKOPT编程。
; 
; 4.EEAVE(烧录时EEPROM数据保留):  1:不保留;0:保留
; 
;   在一次使用EEProm时没注意EEAVE位的编程,调试程序每次烧flash时,EEProm都没了,后来才知道,EEAVE打了勾(1:不保留)。//(*chenran疑问:打了勾是0,怎么是不保留呢)//
; 
; 5.BOOTRST(复位入口选择):  1:程序从0x0000地址开始 0:复位后从BOOT区执行(参考BOOTSZ0/1)
; 
; 6.BOOTSZ 1/0(引导区程序大小及入口):  
; 
; 00: 1024Word/0xc00; 
; 
; 01: 512Word/0xe00; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -