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

📄 atmega16l_uart.lis

📁 电梯楼层采集器代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0004           ; d 高位(BOOT区设置):
 0004           ; 
 0004           ; e 常用熔丝设置
 0004           ; 
 0004           ;  打开运行SLISP.exe,首先记住:
 0004           ; 
 0004           ; 1:未编程(配置熔丝检查框未打钩) 
 0004           ; 
 0004           ; 0:编程 (配置熔丝检查框打钩)
 0004           ; 
 0004           ; 建议在配置熔丝之前先“读取配置”读出原来的设定,再自己编辑。
 0004           ; 
 0004           ; 先了解一下M16的出厂设置。
 0004           ; 
 0004           ; 默认设置为:内部RC振荡8MHz 6 CK + 65 ms CKSEL="0100" SUT="10"低位(时钟及启动时间设置):
 0004           ; 
 0004           ; 1.BOD(Brown-out Detection) 掉电检测电路
 0004           ; 
 0004           ; BODLEVEL(BOD电平选择): 1: 2.7V电平; 0:4.0V电平
 0004           ; 
 0004           ; BODEN(BOD功能控制): 1:BOD功能禁止;0:BOD功能允许 
 0004           ; 
 0004           ; 使用方法:如果BODEN使能(复选框选中)启动掉电检测,则检测电平由BODLEVEL决定。一旦VCC下降到触发电平(2.7v或4.0v)以下,MCU复位;当VCC电平大于触发电平后,经过tTOUT 延时周后重新开始工作。
 0004           ; 
 0004           ; 注:1.复选框选中代表0,0电平有效。             
 0004           ; 
 0004           ;    2.因为M16L可以工作在2.7v~5.5v,所以触发电平可选2.7v(BODLEVEL=0)或4.0v(BODLEVEL=1);而M16工作在4.5~5.5V,所以只能选BODLEVEL=0,BODLEVEL=1不适用于ATmega16。
 0004           ; 
 0004           ; 2.复位启动时间选择
 0004           ; 
 0004           ; SUT 1/0:  当选择不同晶振时,SUT有所不同。
 0004           ; 
 0004           ; 如果没有特殊要求推荐SUT 1/0设置复位启动时间稍长,使电源缓慢上升。
 0004           ; 
 0004           ; CKSEL3/0: 时钟源选择(时钟总表)
 0004           ; 
 0004           ;  
 0004           ; 
 0004           ; 时钟总表  
 0004           ; 
 0004           ;   时钟源               启动延时         熔丝
 0004           ; 
 0004           ;   外部时钟             6 CK + 0 ms               CKSEL=0000 SUT="00"
 0004           ; 
 0004           ;   外部时钟             6 CK + 4.1 ms             CKSEL=0000 SUT="01"
 0004           ; 
 0004           ;   外部时钟             6 CK + 65 ms              CKSEL="0000" SUT="10"
 0004           ; 
 0004           ; 内部RC振荡1MHZ                    6 CK + 0 ms    CKSEL="0001" SUT="00"
 0004           ; 
 0004           ; 内部RC振荡1MHZ                     6 CK + 4.1 ms CKSEL="0001" SUT="01"
 0004           ; 
 0004           ; 内部RC振荡1MHZ1                    6 CK + 65 ms  CKSEL="0001" SUT="10"
 0004           ; 
 0004           ; 内部RC振荡2MHZ                     6 CK + 0 ms   CKSEL="0010" SUT="00"
 0004           ; 
 0004           ; 内部RC振荡2MHZ                     6 CK + 4.1 ms CKSEL="0010" SUT="01"
 0004           ; 
 0004           ; 内部RC振荡2MHZ                     6 CK + 65 ms  CKSEL="0010" SUT="10"
 0004           ; 
 0004           ; 内部RC振荡4MHZ                     6 CK + 0 ms   CKSEL="0011" SUT="00"
 0004           ; 
 0004           ; 内部RC振荡4MHZ                     6 CK + 4.1 ms CKSEL="0011" SUT="01"
 0004           ; 
 0004           ; 内部RC振荡4MHZ                     6 CK + 65 ms  CKSEL="0011" SUT="10"
 0004           ; 
 0004           ; 内部RC振荡8MHZ                     6 CK + 0 ms   CKSEL="0100" SUT="00"
 0004           ; 
 0004           ; 内部RC振荡8MHZ                     6 CK + 4.1 ms CKSEL="0100" SUT="01"
 0004           ; 
 0004           ; 内部RC振荡8MHZ                     6 CK + 65 ms      CKSEL=0100 SUT="10"
 0004           ; 
 0004           ; 外部RC振荡≤0.9MHZ                 18 CK + 0 ms      CKSEL="0101" SUT="00"
 0004           ; 
 0004           ; 外部RC振荡≤0.9MHZ                 18 CK + 4.1 ms    CKSEL="0101" SUT="01"
 0004           ; 
 0004           ; 外部RC振荡≤0.9MHZ                 18 CK + 65 ms     CKSEL="0101" SUT="10"
 0004           ; 
 0004           ; 外部RC振荡≤0.9MHZ                 6 CK + 4.1 ms     CKSEL="0101" SUT="11"
 0004           ; 
 0004           ; 外部RC振荡0.9-3.0MHZ               18 CK + 0 ms      CKSEL="0110" SUT="00"
 0004           ; 
 0004           ; 外部RC振荡0.9-3.0MHZ               18 CK + 4.1 ms    CKSEL="0110" SUT="01"
 0004           ; 
 0004           ; 外部RC振荡0.9-3.0MHZ               18 CK + 65 ms     CKSEL="0110" SUT="10"
 0004           ; 
 0004           ; 外部RC振荡0.9-3.0MHZ               6 CK + 4.1 ms     CKSEL=0110 SUT="11"
 0004           ; 
 0004           ; 外部RC振荡3.0-8.0MHZ               18 CK + 0 ms      CKSEL=0111 SUT="00"
 0004           ; 
 0004           ; 外部RC振荡3.0-8.0MHZ               18 CK + 4.1 ms    CKSEL="0111" SUT="01"
 0004           ; 
 0004           ; 外部RC振荡3.0-8.0MHZ               18 CK + 65 ms     CKSEL=0111 SUT="10"
 0004           ; 
 0004           ; 外部RC振荡3.0-8.0MHZ               6 CK + 4.1 ms     CKSEL="0111" SUT="11"
 0004           ; 
 0004           ; 外部RC振荡8.0-12.0MHZ              18 CK + 0 ms      CKSEL=1000 SUT="00"
 0004           ; 
 0004           ; 外部RC振荡8.0-12.0MHZ              18 CK + 4.1 ms    CKSEL="1000" SUT="01"
 0004           ; 
 0004           ; 外部RC振荡8.0-12.0MHZ              18 CK + 65 ms     CKSEL="1000" SUT="10"
 0004           ; 
 0004           ; 外部RC振荡8.0-12.0MHZ              6 CK + 4.1 ms     CKSEL="1000" SUT="11"
 0004           ; 
 0004           ;    低频晶振(32.768KHZ)                1K CK + 4.1 ms    CKSEL="1001" SUT="00"
 0004           ; 
 0004           ;    低频晶振(32.768KHZ)                1K CK + 65 ms     CKSEL="1001" SUT="01"
 0004           ; 
 0004           ;    低频晶振(32.768KHZ)                32K CK + 65 ms    CKSEL="1001" SUT="10"
 0004           ; 
 0004           ; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    258 CK + 4.1 ms   CKSEL="1010" SUT="00"
 0004           ; 
 0004           ; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    258 CK + 65 ms    CKSEL="1010" SUT="01"
 0004           ; 
 0004           ; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    1K CK + 0 ms      CKSEL=1010 SUT="10"
 0004           ; 
 0004           ; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    1K CK + 4.1 ms    CKSEL="1010" SUT="11"
 0004           ; 
 0004           ; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    1K CK + 65 ms     CKSEL="1011" SUT="00"
 0004           ; 
 0004           ; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    16K CK + 0 ms     CKSEL=1011 SUT="01"
 0004           ; 
 0004           ; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    16K CK + 4.1ms    CKSEL="1011" SUT="10"
 0004           ; 
 0004           ; 低频石英/陶瓷振荡器(0.4-0.9MHZ)    16K CK + 65ms     CKSEL="1011" SUT="11"
 0004           ; 
 0004           ; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    258 CK + 4.1 ms   CKSEL="1100" SUT="00"
 0004           ; 
 0004           ; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    258 CK + 65 ms    CKSEL="1100" SUT="01"
 0004           ; 
 0004           ; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    1K CK + 0 ms      CKSEL=1100 SUT="10"
 0004           ; 
 0004           ; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    1K CK + 4.1 ms    CKSEL="1100" SUT="11"
 0004           ; 
 0004           ; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    1K CK + 65 ms     CKSEL="1101" SUT="00"
 0004           ; 
 0004           ; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    16K CK + 0 ms     CKSEL="1101" SUT="01"
 0004           ; 
 0004           ; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    16K CK + 4.1ms    CKSEL="1101" SUT="10"
 0004           ; 
 0004           ; 中频石英/陶瓷振荡器(0.9-3.0MHZ)    16K CK + 65ms     CKSEL="1101" SUT="11"
 0004           ; 
 0004           ; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    258 CK + 4.1 ms   CKSEL="111"0 SUT="00"
 0004           ; 
 0004           ; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    258 CK + 65 ms    CKSEL="111"0 SUT="01"
 0004           ; 
 0004           ; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    1K CK + 0 ms      CKSEL="111"0 SUT="10"
 0004           ; 
 0004           ; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    1K CK + 4.1 ms    CKSEL="111"0 SUT="11"
 0004           ; 
 0004           ; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    1K CK + 65 ms     CKSEL=1111 SUT="00"
 0004           ; 
 0004           ; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    16K CK + 0 ms     CKSEL="111"1 SUT="01"
 0004           ; 
 0004           ; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    16K CK + 4.1ms    CKSEL="111"1 SUT="10"
 0004           ; 
 0004           ; 高频石英/陶瓷振荡器(3.0-8.0MHZ)    16K CK + 65ms     CKSEL="111"1 SUT="11"
 0004           ; 
 0004           ;  
 0004           ; 
 0004           ; 高位(BOOT区设置):
 0004           ; 
 0004           ; 1. JTAGEN(JTAG允许):  1:JTAG禁止; 0:JTAG允许 
 0004           ; 
 0004           ;    OCDEN(OCD功能允许):  1:OCD功能禁止;0:OCD功能允许 
 0004           ; 
 0004           ;    OCDEN(On-chip Debug):片上调试使能位
 0004           ; 
 0004           ;    JTAGEN(JTAG使能): JTAG测试访问端口
 0004           ; 
 0004           ; 使用方法:在JTAG调试时,使能OCDEN JTAGEN两位(复选框打勾),并保持所有的锁定位处于非锁定状态;在实际使用时为降低功耗,不使能OCDEN JTAGEN,大约减少2-3mA的电流。
 0004           ; 
 0004           ; 2. SPIEN(SPI下载允许):  1:SPI下载禁止;0:SPI下载使能
 0004           ; 
 0004           ; 注:在双龙的软件里,SPIEN是不能编辑的,默认为0。
 0004           ; 
 0004           ; 3. CKOPT(选择放大器模式): CKOPT=0:高幅度振荡输出;CKOPT=1:低幅度振荡输出 
 0004           ; 
 0004           ;    当CKOPT 被编程时振荡器在输出引脚产生满幅度的振荡。这种模式适合于噪声环境,以及需要通过XTAL2 驱动第二个时钟缓冲器的情况,而且这种模式的频率范围比较宽。当保持CKOPT 为未编程状态时,振荡器的输出信号幅度比较小。
 0004           ; 
 0004           ;    其优点是大大降低了功耗,但是频率范围比较窄,而且不能驱动其他时钟缓冲器。(据我测量功耗差别在1mA左右)。
 0004           ; 
 0004           ;    对于谐振器,当CKOPT未编程时的最大频率为8 MHz,CKOPT编程时为16 MHz。内部RC振荡器工作时不对CKOPT编程。
 0004           ; 
 0004           ; 4.EEAVE(烧录时EEPROM数据保留):  1:不保留;0:保留
 0004           ; 
 0004           ;   在一次使用EEProm时没注意EEAVE位的编程,调试程序每次烧flash时,EEProm都没了,后来才知道,EEAVE打了勾(1:不保留)。//(*chenran疑问:打了勾是0,怎么是不保留呢)//
 0004           ; 
 0004           ; 5.BOOTRST(复位入口选择):  1:程序从0x0000地址开始 0:复位后从BOOT区执行(参考BOOTSZ0/1)
 0004           ; 
 0004           ; 6.BOOTSZ 1/0(引导区程序大小及入口):  
 0004           ; 
 0004           ; 00: 1024Word/0xc00; 
 0004           ; 
 0004           ; 01: 512Word/0xe00; 
 0004           ; 
 0004           ; 10: 256Word/0xf00; 
 0004           ; 
 0004           ; 11: 128Word/0xf80
 0004           ; 
 0004           ; 
 0004           ; /*
 0004           ; ATMEGA16L 配置为外部16M晶振的方法:
 0004           ; 配置环境:SL-ISP V1.4.2.3
 0004           ; 熔丝配置:以下仅注明需要打勾的地方
 0004           ; 
 0004           ; BODLEVEL=0    //很关键
 0004           ; CKSEL=1111    //很关键
 0004           ; SUT=01        //可根据自己需要调整
 0004           ; BOOTSZ=00     //可根据自己需要调整
 0004           ; CKOPT=0       //很关键
 0004           ; SPIEN=0       //特别关键,想不勾也不可能,不过如果显示没勾上就意味着软件出
 0004           ; //------------------------------------------------------------------------------
 0004           ; /*
 0004           ; 引导码:              2 byte          = 0xFEFE 
 0004           ; 系统设备号      1 byte                = 0x02
 0004           ; 这三个不管他
 0004           ; 对这三个固定值后面的数据没个字节进行CRC16效验,
 0004           ; 算法:
 0004           ; void CRC16(unsigned int *crc,unsigned char chr).{.  data unsigned int tmp;..  tmp = *crc;.  *crc = (tmp << 8) ^ TableOfCRC16[chr ^ (tmp >> 8)];.}
 0004           ; 最后两个字节就是CRC16的值:
 0004           ;           UDR = CRC >> 8;
 0004           ;           UDR = CRC;
 0004           ; 这个就是发送CRC最后两位数据:
 0004           ; 引导码:                      2 byte          = 0xFEFE 
 0004           ; 系统设备号          1 byte            = 0x02
 0004           ; 控制器地址码:                1 byte          = 1 - 127(0xFF为广播地址,0x00为系统保留)
 0004           ; 数据包长度:          2 byte          = 0 - 0x07FF,表示紧跟数据包长度;
 0004           ; 数据包:                      (变长)          长度可变,由数据包长度指定;
 0004           ; 校验码:                      2 byte          = 计算从地址码开始到数据包最后一个字节的CRC16码。
 0004           ; */
 0004           ; //CCITT CRC16
 0004           ; flash unsigned int TableOfCRC16[256] = /*CRC16校验码表*/
 0004           ; {
 0004           ;       0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
 0004           ;       0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
 0004           ;       0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
 0004           ;       0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
 0004           ;       0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
 0004           ;       0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
 0004           ;       0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
 0004           ;       0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
 0004           ;       0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
 0004           ;       0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
 0004           ;       0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
 0004           ;       0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
 0004           ;       0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
 0004           ;       0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
 0004           ;       0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
 0004           ;       0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
 0004           ;       0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
 0004           ;       0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
 0004           ;       0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
 0004           ;       0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
 0004           ;       0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
 0004           ;       0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
 0004           ;       0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
 0004           ;       0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
 0004           ;       0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
 0004           ;       0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
 0004           ;       0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
 0004           ;       0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
 0004           ;       0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
 0004           ;       0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
 0004           ;       0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
 0004           ;       0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0,
 0004           ; };
 0004           ; 
 0004           ; /*计算单字符CRC16代码*/
 0004           ; void CRC16(unsigned int *crc,unsigned char chr)
 0004           ; {
 0004                   .dbline 292
 0004           ;   unsigned int tmp;
 0004           ;   tmp = *crc;
 0004 F801              movw R30,R16
 0006 A080              ldd R10,z+0
 0008 B180              ldd R11,z+1
 000A                   .dbline 293
 000A           ;   *crc = (tmp << 8) ^ TableOfCRC16[chr ^ (tmp >> 8)];
 000A 1501              movw R2,R10
 000C 232C              mov R2,R3
 000E 3324              clr R3
 0010 E22F              mov R30,R18
 0012 FF27              clr R31
 0014 E225              eor R30,R2
 0016 F325              eor R31,R3
 0018 EE0F              lsl R30
 001A FF1F              rol R31
 001C 80E0              ldi R24,<_TableOfCRC16
 001E 90E0              ldi R25,>_TableOfCRC16
 0020 E80F              add R30,R24
 0022 F91F              adc R31,R25
 0024 2590              lpm R2,Z+

⌨️ 快捷键说明

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